TextItem
是 XObject
的子类。
我想弄清楚为什么以下方法有效:
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/