条款05:了解C++默默编写并调用了哪些函数
当你写了如下的一个空类的时候:
class Test{};
其实编译器默默为你提供了以下一些函数,就相当于你写了如下的代码:
class Test
{
public:
Test(); //默认构造函数
Test(const Test &right); //拷贝构造函数
~Test(); //析构函数(编译器产生的析构函数是非虚的)
Test& operator=(const Test &right); //赋值运算符重载
};
注意:
(1)当你声明了一个构造函数,编译器于是不再为它创建默认构造函数
(2)当你打算在一个内含引用成员的class内支持赋值操作,你必须自己定义赋值运算符重载。
(3)面对内含const成员的class,更改const成员是不合法的,所以编译器不知道如何在它自己生成的赋值函数面对他们。