1. big three
构造,析构,拷贝构造,拷贝赋值。
如果没有定义这四个函数,编译器会自动生成默认函数。
一旦自己定义了,则编译器不会产生默认版本。不能仅声明,否则编译报错。
如果自己还想要默认版本怎么办? A() = default; 仅限构造函数,因为其他函数只能有一个。
2. delete 可以作用于任何函数。
只不过,作用于 big three 之外的函数没啥意义。你自己写的函数,又delete掉,自相矛盾。
3. default 仅能作用于 big three
感觉也就是在构造函数上有用。
或者,其他的 函数,想声明一下,但必须实现,可以加上 default。例如:
virtual ~A() = default; // 基类的析构函数必须 为 虚函数。