=default
告诉编译器使用默认函数
=delete
告诉编译器不使用该函数
默认函数包括以下6类函数
class Ocean {
public:
Ocean(int a, int b):i(a),j(b){} //构造函数
Ocean(const Ocean&)=delete; //拷贝构造函数
Ocean(const Ocean&&)=default; //移动拷贝构造函数
Ocean& operator=(const Ocean&)=delete; //拷贝赋值函数
Ocean&& operator=(const Ocean&&)=default; //移动拷贝赋值函数
virtual ~Ocean(){}; //析构函数
private:
int i, j;
}
如果自行定义一个构造函数,编译器就不会再给你一个构造函数,如果加上=default,可以使用默认的构造函数。
class Ocean {
public:
Ocean(int a, int b):i(a),j(b){} //构造函数
Ocean()=default;
private:
int i, j;
}
如果拷贝构造和拷贝赋值已经自行定义,那么就不能再用=default和=delete关键字
另外构造函数和析构函数执行了一些隐藏的code,比如基类的构造函数和析构函数,非静态成员的构造函数和析构函数。
析构函数可以用=delete修饰,但是对象在创建完成后,就不会被析构掉,这样的后果要自负。