您的位置:首页 > 编程语言 > C语言/C++

C++随笔之-拷贝控制

2017-11-23 16:59 399 查看
拷贝构造函数

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

拷贝构造函数调用的时期

1.用“=”定义变量

2.将一个对象作为实参传递给一个非引用类型的形参

3.从一个返回值类型为非引用类型的函数返回一个对象

4.{} 列表初始化一个数组中的元素或一个聚合类中的成员

析构函数

不接收参数,不能被重载

按初始化顺序的逆序销毁

释放对象在生存期分配的所有资源

需要析构函数的类也需要拷贝和赋值函数

需要拷贝操作的类也需要赋值操作,反之亦然

=default 要求编译器生成合成版本

=delete 来阻止函数使用(构造、析构、拷贝、赋值、移动拷贝、移动赋值)

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

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

如果一个类有数据成员不能默认构造、拷贝、复制或销毁,则对应的成员函数将被定义为=delete

编译器将合成成员定义为删除函数发生在以下情况下:

1.类中某个成员的析构函数是=delete的或private的,则该类的合成析构函数、默认构造函数、合成拷贝构造函数 为=delete

2.类中某个成员的拷贝构造函数是=delete的或private的,则该类的合成拷贝构造为=delete

3.如果类内有引用或const成员且没有类内初始化,且默认构造函数没有=default,则默认构造函数为=delete

=运算符通常组合了析构函数和构造函数的操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息