默认复制构造函数以成员按位复制(bit-by-bit)的方式实现成员的复制。按位复制就是把一个对象各数据成员的值原样复制到目标对象中。在没有涉及指针类型的数据成员时,默认构造函数能够很好地工作。但是,当一个类有指针类型的数据成员时,默认复制构造函数常会产生指针悬挂问题。如果类存在指针类型的数据成员,就应该为他提供自定义的复制构造函数(也就是重载)
注意:复制构造函数的参数常常是const类型的本类对象的引用(X::X(const X&){})
2.析构函数
析构函数(destructor)是与类同名的另一个特殊成员函数,作用于构造函数相反,用于在对象生存期结束时完成对象的清理工作。
析构函数的名字由“~”+“类名”构成,形式如下:
class X
{
private:
//............
public:
~X(); //析构函数
X(); //无参构造函数
X(....); // 有参重载的构造函数
//.........
}
析构函数具有以下特点:
(1)析构函数的名字是在类名前加上“~”,不能是其他名字
(2)析构函数没有返回值类型(void也不行),没有参数表
(3)析构函数不能重载,一个类只能有一个析构函数
(4)析构函数只能由系统自动调用,不能再程序中显示调用析构函数
(5)若有多个对象同时结束生存期,C++按照与调用构造函数相反的次序调用析构函数
(6)每个类都应该有一个析构函数,如果没有显示定义析构函数,C++将产生一个最小化的默认析构函数(X::~X())
(7)构造函数和析构函数都可以是inline函数
(8)在通常情况下,析构函数应设置为公有成员