c++ - C++ 中的新建、删除和子类

标签 c++ oop memory-management new-operator

TextItemXObject 的子类。

我想弄清楚为什么以下方法有效:

  TextItem *textItem = new TextItem();
  XObject *xItem = textItem;
  delete textItem;

但这不是:

  TextItem *textItem = new TextItem();
  XObject *xItem = textItem;
  delete xItem;

第二个示例在 delete 上失败,断言失败 (_BLOCK_TYPE_IS_VALID)。

最佳答案

XObject *xItem = textItem;
delete xItem;

仅当XObject 具有虚拟析构函数时,这才有效。否则,delete 语句会调用未定义的行为。

class XObject
{
    public:
       virtual ~XObject();
     //^^^^^^ this makes virtual destructor
};

关于c++ - C++ 中的新建、删除和子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688719/

相关文章:

c++ - 在继承模板类中使用下标[]运算符

python - 使用参数从 Python 调用 C/C++ 代码

MATLAB - 使用 'clear' 时运行对象析构函数?

objective-c - Objective-C 中的自动释放池 - 释放主自动释放池?

ios - iOS 的分配工具 : compare memory of two snapshots

c++ - circshift 方面的 fftshift/ifftshift

c++ - 断言值文字没有类型是假的?

PHP OOP - 类内的 MySQL 连接

PHP5 OOP 类结构

c++ - 使 std::vector 分配对齐的内存