使用=default,=delete

1.使用=default

我们可以通过将拷贝控制成员定义为=default来显式地要求编译器生成合成的版本。

class a()

{

public :

a()=default;

a(a&)=default;

~a()=default;
}

在类内声明为default, 合成的函数隐式地声明为内联函数(就像其他类内声明的成员函数一样)。不希望内联,类外定义。

2.使用=delete

有时候我们不希望类进行拷贝,需要机制阻止拷贝或赋值。不定义拷贝控制成员并不奏效,编译器会生成合成版本。加=delete,表示函数虽然声明,但不能使用。

必须出现在第一次声明时。

析构函数不能是删除成员,否则无法销毁对象了。

当一个类中有数据成员不能默认构造,拷贝,复制或销毁,对应的成员函数将被定义为删除的。

阻止拷贝的另一种方式private

将拷贝构造函数声明为private

猜你喜欢

转载自blog.csdn.net/weixin_42752435/article/details/81177002
今日推荐