C++三/五法则
三/五法则基本原理
需要自定义析构函数的类也需要自定义拷贝和赋值操作,三者视为整体。
合成拷贝的问题
合成的拷贝操作是浅拷贝,会出现两个指针指向同一块内存的情况,析构时就会对同一块内存释放两次,程序崩溃。
操作依存关系
拷贝和赋值操作也相互依存,同时出现。
默认函数控制
=default用法
自定义了拷贝控制成员后编译器不会再自动生成合成的版本,如果还想使用合成版本,就在定义拷贝控制成员时加上=default来显式要求。
拷贝控制
阻止拷贝
=delete定义为删除的函数:
- 必须出现在函数第一次声明的时候
- 可以对任意成员函数使用
- 但不能删除析构函数
历史做法
旧版本会将拷贝构造函数和拷贝赋值运算符声明为private来阻止拷贝。
评论