C++ 此代码中调试断言的原因
假设我有这个代码——这个代码什么都不做,我知道它们是内存泄漏,因为汽车的析构函数不是虚拟的。但是我不明白为什么我会得到这段代码的调试断言。我正在使用VisualStudio2010C++ 此代码中调试断言的原因,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
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"; }
// ↑↑↑↑↑↑↑
};