梳理 C++类的 合成默认构造函数(Synthesized Constructor / Operator)

        构造函数是 C++ 中实现类的初始化、对象复制、赋值、移动、内存管理等操作的重要工具。本页整理了各类编译器自动生成的 C++ 构造函数(或运算符)的名称、形式、生成的条件及其功能。

为了方便叙述,对本表内容作出如下约定:

1.  本文在表示构造函数(或运算符)时,统一使用 Foo 作为构造函数(或运算符)所属类的类名。

2. “功能” 列所指成员均为非静态成员

3. 默认初始化:根据初始化位置,在全局作用域初始化时初始为0、空字符串等初始值;在局部作用为内存中的随机值。

名称

形式条件功能
缺省构造函数 (Default Constructor)Foo();不存在任何自建的构造函数

1. 对类成员调用构造函数;

2. 对其它成员默认初始化 (Default Initialization)。

析构函数 (Destructor)~Foo();不存在自建的析构函数

1. 对类成员调用析构函数;

2. 对其它成员自动释放资源。(指针本身将被释放,指针所指向的内存资源不会被释放)

拷贝构造函数 (Copy Constructor)Foo(const Foo &);

1. 不存在自建的拷贝构造函数;

2. 所有成员对象的拷贝构造函数均可用;

3. 所有成员对象的析构函数均可用。

1. 对类成员调用拷贝构造函数;

2. 对其它成员逐一拷贝。(数组中的元素则被逐一拷贝)

3. 在无移动构造函数时代替移动构造函数被调用

拷贝赋值函数 (Copy-Assignment Operator)Foo& operator=(const Foo &);

1. 不存在自建的拷贝赋值函数;

2. 所有成员对象的拷贝赋值函数均可用;

3. 所有成员对象的析构函数均可用。

4. 不存在 const 或引用类型的成员

1. 对类成员调用拷贝赋值函数;

2. 对其它成员逐一赋值。(数组中的元素被则逐一赋值)

3. 在无移动赋值函数时代替移动构造函数被调用

移动构造函数 (Move Constructor)Foo(Foo &&);

1. 不存在自建的拷贝构造函数拷贝赋值函数析构函数

2. 不存在自建的移动构造函数

3. 所有成员均可移动

4. 所有成员的析构函数均可用

1. 对类成员调用移动构造函数;

2. 对其它成员逐一移动。(数组中的元素被则逐一移动)

移动赋值函数 (Move-Assignment Operator)Foo& operator=(Foo &&);

1. 不存在自建的拷贝构造函数拷贝赋值函数析构函数

2. 不存在自建的移动赋值函数

3. 所有成员均可移动

4. 所有成员的析构函数均可用

5. 不存在 const 或引用类型的成员

1. 对类成员调用移动赋值函数;

2. 对其它成员逐一移动赋值。(数组中的元素被则逐一移动赋值)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Remy Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值