What is the order in which the destructors and the constructors are called in C++

后端 未结 5 1046
执笔经年
执笔经年 2020-12-07 16:48

What is the order in which the destructors and the constructors are called in C++? Using the examples of some Base classes and Derived Classes

5条回答
  •  情话喂你
    2020-12-07 17:01

    This is clearly described at order-dtors-for-members. Basically, the rule is "First constructed, last destructed."

    Constructors calling order:

    1. base's constructors are called in the order of appearance after the ":"
    2. derived class member's constructors are called in the order of appearance and before class's constructor

    Destructors are called in reversed order of called constructors.

    Example:

    #include 
    
    struct base0 {  base0(){printf("%s\n", __func__);};~base0(){printf("%s\n", __func__);}; };
    struct base1 { base1(){printf("%s\n", __func__);}; ~base1(){printf("%s\n", __func__);};};
    struct member0 { member0(){printf("%s\n", __func__);};  ~member0(){printf("%s\n", __func__);};};
    struct member1 { member1(){printf("%s\n", __func__);}; ~member1(){printf("%s\n", __func__);};};
    struct local0 { local0(){printf("%s\n", __func__);}; ~local0(){printf("%s\n", __func__);}; };
    struct local1 { local1(){printf("%s\n", __func__);};  ~local1(){printf("%s\n", __func__);};};
    struct derived: base0, base1
    {
      member0 m0_;
      member1 m1_;
      derived()
      {
        printf("%s\n", __func__);
        local0 l0;
        local1 l1;
      }
      ~derived(){printf("%s\n", __func__);};
    };
    int main()
    {
      derived d;
    }
    

    Output:

    base0
    base1
    member0
    member1
    derived
    local0
    local1
    ~local1
    ~local0
    ~derived
    ~member1
    ~member0
    ~base1
    ~base0
    

提交回复
热议问题