假设我有这段代码-该代码不执行任何操作,并且我知道它们是内存泄漏,因为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/

10-11 22:36
查看更多