C ++中析构函数调用的顺序

时间:2015-04-21 05:11:20

标签: c++

我在main中有五个用户定义的对象,如下所示:

他们的析构函数是否有任何特定的顺序被调用?比如说定义的顺序如下:

Student s1;
Student s2;
Student s3;
Student s4;
Student s5;

s5的析构函数是先被调用还是s1'

2 个答案:

答案 0 :(得分:5)

将按照s5s4s3s2s1的顺序调用析构函数。这是一般规则:如果两个对象的生命周期重叠,那么要构造的第一个将是最后一个被自动销毁的对象。当然,这不适用于动态存储持续时间的对象,这些对象不会自动销毁。 (例如,<{em>}使用new创建的对象在您拨打delete时会被销毁。)

答案 1 :(得分:1)

是的,破坏的顺序总是与施工顺序相反。

请查看以下代码。

  class Base
  {
   public:

   Base ( )
   {
     cout << "Inside Base constructor" << endl;
   } 


  ~Base ( )
  {
    cout << "Inside Base destructor" << endl;
  } 

};

class Derived : public Base
{

 public:

 Derived  ( )
 {
   cout << "Inside Derived constructor" << endl;
 } 

 ~Derived ( )
 {
  cout << "Inside Derived destructor" << endl;
 } 

 };

  void main( )
  {
    Derived x;
  }

如果您运行此代码,您将获得以下输出。

   Inside Base constructor
   Inside Derived constructor
   Inside Derived destructor
   Inside Base destructor