条款05

来源:互联网 发布:android精美界面源码 编辑:程序博客网 时间:2024/04/29 08:49

1、class Empty{ };

当c++处理过空类之后,编译器会为它声明一个拷贝构造函数,一个赋值运算符和一个析构函数,还有default构造函数。所有这些函数都是public且inline的。

 

唯有当这些函数被需要时,它们才会被编译器创建出来:

Empty e1;         //default构造函数

                 //析构函数

Empty e2(e1);      //拷贝构造函数

e2 = e1;          //赋值操作符

编译器产生的析构函数是non-virtual的。

 

2、如果你打算在一个“内含引用成员变量”的class内支持赋值操作,你必须自己定义赋值操作符operator = ,编译器会拒绝编译那一行赋值动作,即不会自动生成复制操作符。面对“内含const成员”的class来说,编译器的反应一样。

 

如果某个基类将赋值操作符operator = 声明为private,编译器将拒绝为其派生类生成一个赋值操作符。毕竟编译器为派生类生成的操作符想想中可以处理基类成分。

1 0