none
继承关系中,构造函数和析构函数的顺序 RRS feed

  • 问题

  • 一直记不住为什么构造基类,再构造派生类,先析构派生类,再构造基类。

    想知道为什么是这个顺序?难道是编译器硬规定的?

    请大牛指点!!!万分感激

    2011年11月6日 6:13

答案

  • 因为派生类包含有基类,而构造和析构是针对自己的部分的,也就是父类负责父类部分的初始化,子类负责子类的。

    而子类的初始化有可能会用到父类的成员,如果这时父类没有初始化,根据C++的特性,那这就是不可预知的操作了,成员的值可能是任意的,这当然不是你想要的结果。

    所以要先构造基类然后派生类,而析构是构造的逆运算,所以是先派生类后基类,理由是相同的,父类不会使用子类的成员,而子类有可能使用父类的。

    2011年11月7日 0:51

全部回复

  • 因为派生类包含有基类,而构造和析构是针对自己的部分的,也就是父类负责父类部分的初始化,子类负责子类的。

    而子类的初始化有可能会用到父类的成员,如果这时父类没有初始化,根据C++的特性,那这就是不可预知的操作了,成员的值可能是任意的,这当然不是你想要的结果。

    所以要先构造基类然后派生类,而析构是构造的逆运算,所以是先派生类后基类,理由是相同的,父类不会使用子类的成员,而子类有可能使用父类的。

    2011年11月7日 0:51
  • 您说的非常对,非常感谢!
    2011年11月8日 6:09
  • 呵呵,不要客气。
    2011年11月10日 1:08