为什么析构函数以相反的顺序调用?
why the desturctor called in reverse order?
在继承中为什么析构函数调用的顺序与构造函数相反?
#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++ 标准中定义的那样:销毁事物的顺序,如成员变量、基类、作用域中的局部对象,与创建顺序相反。
当Base
已经被摧毁不能再使用时,你是否希望你的Derived
的dtor body变成运行?
在继承中为什么析构函数调用的顺序与构造函数相反?
#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++ 标准中定义的那样:销毁事物的顺序,如成员变量、基类、作用域中的局部对象,与创建顺序相反。
当Base
已经被摧毁不能再使用时,你是否希望你的Derived
的dtor body变成运行?