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

标签 c++ destructor c++03

假设我有这段代码——这段代码什么都不做,我知道它们是内存泄漏,因为 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 类的析构函数未声明为虚拟的,我不会得到此断言。我想知道这有什么问题?

最佳答案

要使析构函数虚拟,您需要在基类中声明它:

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

没有这个,你的代码就有undefined behaviour .

关于c++ - 此代码中调试断言的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28391149/

相关文章:

python - 执行 make 时在 Raspberry Pi 中安装 OpenCV 时出错

c++ - 是否可以在不调用析构函数的情况下删除 C++ 中的对象?

c++ - 将一小段代码从 c++11 转换为 c++03?

c++ - 如何从一个到另一个减去 std::map 元素并在 C++ 中更新它

c++ - 复制 C 对象

c++ - 编译错误 - Makefile 日志

c++ - 全局 bool 变量在全局销毁期间是否可靠?

c++ - scoped_lock() - 使用 pthread 的 RAII 实现

C++ MFC - 代码执行失败而不在 CDialog::OnSize 事件 (GetWindowRect) 上引发运行时错误

qt - QApplication 析构函数未正确调用