【问题标题】:why the desturctor called in reverse order? [duplicate]为什么析构函数以相反的顺序调用? [复制]
【发布时间】:2018-12-09 07:46:22
【问题描述】:

在继承中,为什么析构函数以相反的顺序作为构造函数调用?

#include "stdafx.h"
#include <iostream>

class Base {
int value ; 
public : 
Base()value{0}{std::cout << "Base Constructor called" << std::endl; }
~Base(){std::cout << "Base Destructor called" << std::endl; }
};

class Derived : public Base {
int d_value ; 
public : 
Derived()d_value{0}{std::cout << "Derived Constructor called" << std::endl; }
~Derived(){std::cout << "Derived Destructor called" << std::endl; }
};

int main() {
Derived d ; 
return 0 ; 
}
  • //输出
  • 已调用基本构造函数
  • 已调用派生构造函数
  • 调用的派生析构函数
  • 已调用基本析构函数

【问题讨论】:

  • 因为语言保证了这一点(并且这是有道理的!:))如果你谷歌“c++ order of destroy”,有很多信息。
  • 这只是定义的行为。想象一座房子:你从下到上建造它,然后从上到下破坏。从下往上做后者可能会导致顶部掉到你的头上。
  • 另一个相关阅读:stackoverflow.com/questions/7241385/…

标签: c++ constructor destructor


【解决方案1】:

正如 C++ 标准中所定义的那样:销毁事物的顺序,如范围内的成员变量、基数、局部对象,与创建顺序相反。

您是否希望在Base 已被销毁且不能再使用时运行您的Derived 的dtor 主体?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2021-06-21
    • 2011-11-06
    • 1970-01-01
    • 2011-06-25
    • 2015-04-28
    • 2010-10-13
    相关资源
    最近更新 更多