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

Order of destructor calls in C++

本文关键字:C++ 顺序 函数调用 析构      更新时间:2023-10-16

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

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

Student s1;
Student s2;
Student s3;
Student s4;
Student s5;
s5 的析构函数

是先调用还是 s1 的析构函数?

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

是的,破坏的顺序总是与构造的顺序相反。

请看下面的代码。

  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