C++类的构造函数、析构函数学习笔记(2)

  默认复制构造函数以成员按位复制(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)在通常情况下,析构函数应设置为公有成员

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9979b0b93fb0b3533f5ce7a418b3439e.html