1.使用=default
我们可以通过将拷贝控制成员定义为=default来显式地要求编译器生成合成的版本。
class a()
{
public :
a()=default;
a(a&)=default;
~a()=default;
}
在类内声明为default, 合成的函数隐式地声明为内联函数(就像其他类内声明的成员函数一样)。不希望内联,类外定义。
2.使用=delete
有时候我们不希望类进行拷贝,需要机制阻止拷贝或赋值。不定义拷贝控制成员并不奏效,编译器会生成合成版本。加=delete,表示函数虽然声明,但不能使用。
必须出现在第一次声明时。
析构函数不能是删除成员,否则无法销毁对象了。
当一个类中有数据成员不能默认构造,拷贝,复制或销毁,对应的成员函数将被定义为删除的。
阻止拷贝的另一种方式private
将拷贝构造函数声明为private