C++ 此代码中调试断言的原因

C++ 此代码中调试断言的原因,c++,destructor,c++03,C++,Destructor,C++03,假设我有这个代码——这个代码什么都不做,我知道它们是内存泄漏,因为汽车的析构函数不是虚拟的。但是我不明白为什么我会得到这段代码的调试断言。我正在使用VisualStudio2010 struct car { ~car() {std::cout << "Destructor of car"; } }; struct honda: public car { virtual ~honda() { std::cout << "Destruct

假设我有这个代码——这个代码什么都不做,我知道它们是内存泄漏,因为汽车的析构函数不是虚拟的。但是我不明白为什么我会得到这段代码的调试断言。我正在使用VisualStudio2010

struct car {
    ~car() 
    {std::cout << "Destructor of car";  }
};
struct honda: public car {
     virtual ~honda()
    { std::cout << "Destructor of honda"; }
};

int main()
{
    car *c = new honda();
    delete c;
}
struct-car{
~car()

{std::cout要使析构函数
虚拟化
,需要在基类中声明它:

struct-car{

virtual~car(){std::cout若要使派生类析构函数为虚拟的,还必须使基类析构函数为虚拟的。 有关详细说明,请参阅

本田
的析构函数不是虚拟的时,断言消失的原因是它得到了很好的定义。尽管如此,建议将基类析构函数设置为虚拟的,以便通过继承层次结构获得销毁调用

struct car {
    virtual ~car() {std::cout << "Destructor of car";  }
 // ↑↑↑↑↑↑↑
};