【发布时间】:2014-11-22 16:56:16
【问题描述】:
这样做是否正确:
MyClass mc1(1, 1);
MyClass* pmc1 = &mc1;
delete pmc1;
我在一个代码示例中看到了它。我以为我们可以在指向堆上分配的对象的指针上调用 delete,但是这个指针指向堆栈上的一个对象,不是吗? 谁能解释一下。
【问题讨论】:
标签: c++ destructor delete-operator
这样做是否正确:
MyClass mc1(1, 1);
MyClass* pmc1 = &mc1;
delete pmc1;
我在一个代码示例中看到了它。我以为我们可以在指向堆上分配的对象的指针上调用 delete,但是这个指针指向堆栈上的一个对象,不是吗? 谁能解释一下。
【问题讨论】:
标签: c++ destructor delete-operator
没有。您永远不应该在指向尚未使用new 创建的对象的指针上调用delete。这是未定义的行为。
C++ 标准 n3337 § 5.3.5/2 删除
(...)delete的操作数的值可以是空指针值,a 指向由先前的 new 表达式创建的非数组对象的指针,或 一个指向子对象 (1.8) 的指针,表示此类的基类 对象(第 10 条)。如果不是,则行为未定义。
【讨论】: