1、class Empty{ };
当c++处理过空类之后,编译器会为它声明一个拷贝构造函数,一个赋值运算符和一个析构函数,还有default构造函数。所有这些函数都是public且inline的。
唯有当这些函数被需要时,它们才会被编译器创建出来:
Empty e1; //default构造函数
//析构函数
Empty e2(e1); //拷贝构造函数
e2 = e1; //赋值操作符
编译器产生的析构函数是non-virtual的。
2、如果你打算在一个“内含引用成员变量”的class内支持赋值操作,你必须自己定义赋值操作符operator = ,编译器会拒绝编译那一行赋值动作,即不会自动生成复制操作符。面对“内含const成员”的class来说,编译器的反应一样。
如果某个基类将赋值操作符operator = 声明为private,编译器将拒绝为其派生类生成一个赋值操作符。毕竟编译器为派生类生成的操作符想想中可以处理基类成分。