1、拷贝控制操作
拷贝控制操作有拷贝构造函数、拷贝赋值函数、移动构造函数、移动赋值运算符和析构函数。
如果一个类没有定义所有这些拷贝控制成员,编译器会自动为它定义(合成)缺失的操作,如定义一个合成拷贝构造函数、合成拷贝赋值函数等。因此,很多类会忽略这些拷贝控制操作。但是,对一些类来说,依赖这些操作的默认定义会导致灾难。
2、使用=default
如果我们不想使用编译器默认生成的拷贝控制操作,我们可以通过将拷贝控制成员定义为=default来显示地要求编译器生成合成的版本。
例:
class MyData{
public:
MyData() = default; // 构造函数
MyData(const MyData&) = default; // 拷贝构造函数
MyData& operator=(const MyData &); // 拷贝赋值运算
~ MyData() = default; // 析构函数
};
MyData& MyData::operator &#