C++ 为什么继承类的析构函数没有被调用?
为什么不调用C++ 为什么继承类的析构函数没有被调用?,c++,C++,为什么不调用Circle析构函数 #include "stdafx.h" #include <iostream> class Shape { public: Shape() { std::cout << "Shape Constructor\n"; }; ~Shape() { std::cout << "Shape Destructor\n&qu
Circle
析构函数
#include "stdafx.h"
#include <iostream>
class Shape {
public:
Shape() {
std::cout << "Shape Constructor\n";
};
~Shape() {
std::cout << "Shape Destructor\n";
};
};
class Circle: public Shape {
public:
Circle() {
std::cout << "Circle Constructor\n";
};
~Circle() {
std::cout << "Circle Destructor\n";
};
};
int _tmain(int argc, _TCHAR* argv[])
{
Shape *object;
object = new Circle();
delete object;
return 0;
}
默认情况下,继承不允许派生类析构函数自动调用基类的析构函数。但是,将基类的析构函数定义为
virtual
可以使派生类在销毁之前隐式调用基类的析构函数。因为(基类的)析构函数不是virtual
请在发布之前将您的示例最小化。只是措辞问题,但情况正好相反:delete对象
只调用基类析构函数。“不允许派生类析构函数自动调用基类的析构函数”这不是virtual
也会发生的情况。这个答案只有部分正确。如果基类中没有虚拟析构函数,delete
表达式具有未定义的行为。虽然在实践中(即,多个编译器的情况)结果只调用基类构造函数是相当普遍的,但这不是标准所要求的。
Shape Constructor
Circle Constructor
Shape Destructor