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