使用delete调用析构函数

calling destructor using delete

本文关键字:析构函数 调用 delete 使用      更新时间:2023-10-16

执行以下操作正确吗:

MyClass mc1(1, 1);
MyClass* pmc1 = &mc1;
delete pmc1;

我在一个代码示例中看到了它。我想我们可以在指向堆上分配的对象的指针上调用delete,但这个指针指向堆栈上的一个对象,不是吗?有人能解释一下吗?

否。您永远不应该在指向尚未使用new创建的对象的指针上调用delete。这是未定义的行为。

C++标准n3337§5.3.5/2删除

(…)delete操作数的值可以是空指针值指向由以前的新表达式创建的非数组对象的指针,或者指向子对象(1.8)的指针,该子对象表示这样的目标(第10条)。如果不是,则行为未定义。