假设我有这段代码-该代码不执行任何操作,并且我知道它们是内存泄漏,因为car的析构函数不是虚拟的。但是,我不明白为什么要为此代码获得调试断言。我正在使用Visual Studio 2010。
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;
}
如果
honda
类的析构函数未声明为虚拟,则不会收到此断言。我想知道这是什么问题? 最佳答案
要创建析构函数virtual
,您需要在基类中声明它:
struct car {
virtual ~car() {std::cout << "Destructor of car"; }
// ↑↑↑↑↑↑↑
};
没有这个,您的代码将具有undefined behaviour。
关于c++ - 此代码中调试声明的原因,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28391149/