标签:
什么时候empty class(空类)不再是个empty class呢?当C++处理过它之后,是的,如果你自己没有声明,编译器就会为它声明(编译器版本)一个copy构造函数、一个copy assignment操作符和一个析构函数。此外如果你没有声明任何构造函数,编译器也会为你声明一个default构造函数。所有这些都是public且inline。
编译器所生成的copy assignment操作符,其行为基本上与copy构造函数如出一辙,但一般而言只有当生出的代码合法且有适当机会证明它有意义,编译器才会生成。
假如,类中存在引用数据成员和const成员,此时就不会生成copy assignment了。因为C++不允许“让引用改指向不同对象”。
面对这样的难题,C++的响应是拒绝编译那一行赋值动作。如果你打算在一个“内含引用成员”的class内支持赋值操作,你必须自己定义copy assignment 操作符。面对“内含const成员”的classes,编译器的反应也是一样的。更改const成员是不合法的,所以编译器不知道如何在它自己生成的赋值函数内面对它们。最后还有一种情况:如果某个base class将copy assignment操作符声明为private,编译器将拒绝为其derived class生成一个copy assignment操作符。毕竟编译器为derived classes所生的copy assignment操作符想象中可以处理base class成分,但它们当然无法调用derived class无权调用的成员函数。编译器两手一摊,无能为力。
标签:
原文地址:http://www.cnblogs.com/wuchanming/p/4332866.html