使用default delete两个关键字可以简化构造函数的定义和使用
1 default函数
使用=default可以显示要求编译器自动生成默认或复制构造函数
如:
class MyClass {
public:
MyClass() = default; // 默认构造函数
MyClass(const MyClass&) = default; // 复制构造函数
MyClass& operator=(const MyClass&) = default; // 复制赋值操作符
~MyClass() = default; // 析构函数
// 可能还有其他成员函数或数据成员
};
当然default只能合成简单的不含参数的
其他使用含参数的构造函数则不可以
2 delete
delete可以删去复制构造函数
delete不限于在无参和复制构造函数上使用
除析构函数外都可以用delete删去
如:
class NonCopyable {
public:
NonCopyable() = default; // 默认构造函数可用
~NonCopyable() = default; // 析构函数可用
// 禁用复制构造函数
NonCopyable(const NonCopyable&) = delete;
// 禁用复制赋值操作符
NonCopyable& operator=(const NonCopyable&) = delete;
// 禁用移动构造函数(如果需要)
NonCopyable(NonCopyable&&) = delete;
// 禁用移动赋值操作符(如果需要)
NonCopyable& operator=(NonCopyable&&) = delete;
// 可能还有其他成员函数或数据成员
};