什么时候empty class(空类)不再是个empty呢?当C++处理过它之后。如果你定义类的时候自己没有声明,编译器就会为它声明(编译器版本的)一个copy构造函数、一个copy assignment操作符和一个析构函数。如果你没有声明任何构造函数,编译器也会为你声明一个default构造函数。所有这些函数都是public并且inline。例:
class Empty
{
};
就相当于写下:
class Empty
{
public:
Empty(){...} //default构造函数
Empty(const Empty& rhs){...} //copy构造函数
~Empty() {...} //析构函数
Empty& operator=(const Empty& rhs){...} //copy assignment操作符
};
当这些函数被需要,它们就会被编译器创建出来。
Empty e1; //default构造函数
Empty e2(e1); //copy构造函数
e2 = e1; //copy assignment操作符
结论:编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符、以及析构函数。