1.默认生成的函数
当你定义一个空类C++会自动为你生成默认构造函数,拷贝构造函数,赋值运算符重载,析构函数。
这些函数都是public且inline
class Empty {......};
//经过C++处理后
class Empty
{
Empty(){.......};//默认构造
Empyt(const Empty &rhs){.........};//拷贝构造
Empty& operator=(const Empty & rhs){......};//赋值运算符重载
~Empty(){........};//析构函数
};
这些函数只有在被调用的时候才会实例化出来。
当成员变量有&和const时编译器拒绝为其生成赋值运算符重载
2.拷贝构造和赋值运算符重载引发析构多次的问题
如果你的成员变量指向了一个类外的空间,这个时候就不能使用默认的拷贝构造和赋值。
因为默认生成的拷贝构造和赋值,只会原本的对象的每一个成员变量拷贝到目标对象,如果是指针,会出现两个指针指向一个对象,当原本对象析构,其指向的空间被释放,但是目标对象还会对该空间再次析构。