如果你写下 class Empty{ }; 这样的一个空的class,编译器将帮我们加上默认的构造、析构、拷贝构造和赋值函数。
在这些函数需要被调用时候,编译器会将它们创建出来。
default 构造和析构主要来做调用基类 和 非静态成员的构造和析构。
注意:编译器创建的析构函数是一个非虚的。
拷贝构造和拷贝赋值操作符,编译器创建的版本只是单纯地将来源对象的每一个non-static成员变量拷贝到目标对象。
拷贝方式:对于有自己的拷贝构造(或拷贝赋值)函数的成员,调用其拷贝构造(或拷贝赋值)。对于内置类型按位拷贝。
有三种情况:①有const 成员;②有引用类型的成员(相当于const指针);③基类的拷贝赋值操作符号声明为private。
在这三种情况下,编译器无法生成默认的拷贝赋值函数。