【发布时间】: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”,有很多信息。
-
这只是定义的行为。想象一座房子:你从下到上建造它,然后从上到下破坏。从下往上做后者可能会导致顶部掉到你的头上。
标签: c++ constructor destructor