C++随笔之-拷贝控制

拷贝构造函数
第一个参数必须是引用类型。原因:如果参数不是引用类型 在调用拷贝构造函数时,一定会拷贝它的实参,如果要拷贝实参就必定会调用它的拷贝构造。那就会这样无限循环下去。

拷贝构造函数调用的时期
1.用“=”定义变量
2.将一个对象作为实参传递给一个非引用类型的形参
3.从一个返回值类型为非引用类型的函数返回一个对象
4.{} 列表初始化一个数组中的元素或一个聚合类中的成员

析构函数
不接收参数,不能被重载
按初始化顺序的逆序销毁
释放对象在生存期分配的所有资源

需要析构函数的类也需要拷贝和赋值函数
需要拷贝操作的类也需要赋值操作,反之亦然

=default 要求编译器生成合成版本
=delete 来阻止函数使用(构造、析构、拷贝、赋值、移动拷贝、移动赋值)

=delete必须出现在函数第一次声明的时候

正常情况下析构函数不能是=delete的,因为这样类对象就没法释放了

如果一个类有数据成员不能默认构造、拷贝、复制或销毁,则对应的成员函数将被定义为=delete
编译器将合成成员定义为删除函数发生在以下情况下:
1.类中某个成员的析构函数是=delete的或private的,则该类的合成析构函数、默认构造函数、合成拷贝构造函数 为=delete
2.类中某个成员的拷贝构造函数是=delete的或private的,则该类的合成拷贝构造为=delete
3.如果类内有引用或const成员且没有类内初始化,且默认构造函数没有=default,则默认构造函数为=delete

=运算符通常组合了析构函数和构造函数的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值