使用delete调用析构函数

时间:2014-09-28 00:50:39

标签: c++ destructor delete-operator

执行以下操作是否正确:

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

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

1 个答案:

答案 0 :(得分:7)

没有。永远不要在指向未使用delete创建的对象的指针上调用new。这是未定义的行为。

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

  

(...)delete的操作数的值可以是空指针值,a   指向由前一个new-expression创建的非数组对象的指针,或   指向表示这种类的基类的子对象(1.8)的指针   对象(第10条)。如果不是,则行为未定义。