- 使用范围,特殊成员函数
- 用法简单=default
对于c++的类,如果没有为其定义特殊成员函数,那么在用到的时候,编译器会隐式的生成一个默认的构函数。
class X {
public:
X();
};
int main() {
X x1;
X x2= x1; // 编译器隐式的生成了默认拷贝 *构造* 函数
X x3;
x3=x1 // 默认拷贝 *赋值* 函数
}
在清单 10 中,程序员不需要自己手动编写拷贝构造函数以及拷贝赋值操作符,依靠编译器自动生成的默认拷贝构造函数以及拷贝赋值操作符就可以实现类对象的拷贝和赋值。 这在某些情况下是非常方便省事的,但是在某些情况下,假设我们不允许发生类对象之间的拷贝和赋值,可是又无法阻止编译器隐式自动生成默认的拷贝构造函数以及拷贝赋值操作符,那这就成为一个问题了。
- 可以自动生成,很好很强大
- 如果我们不需要的时候,那么这个问题就麻烦了
c++11 提供了如何禁用一个函数的特性 delete 关键字
- 和default关键字一样,只需要在 function_name 后加一个 "=delete" ok
- delete 要比 default使用范围广泛