这个问题在这里已有答案:
在继承中为什么析构函数以相反的顺序调用为构造函数?
#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 ;
}
-
//输出
-
基本构造函数被调用
-
派生的构造函数被调用
-
派生的析构函数被调用
-
基础析构函数调用
1 回答
这就像它在C标准中定义的那样:破坏事物的顺序,如成员变量,基础,范围中的本地对象,是创建顺序的反转 .
当
Base
已被销毁并且不能再使用时,您是否希望运行Derived
的dtor体?