执行以下操作是否正确:
MyClass mc1(1, 1);
MyClass* pmc1 = &mc1;
delete pmc1;
我在代码示例中看到了它。我以为我们可以在指向堆上分配的对象的指针上调用delete但是这个指针指向堆栈上的对象,不是吗? 有人可以解释一下吗。
答案 0 :(得分:7)
没有。永远不要在指向未使用delete
创建的对象的指针上调用new
。这是未定义的行为。
C ++标准版n3337 § 5.3.5 / 2删除
(...)delete的操作数的值可以是空指针值,a 指向由前一个new-expression创建的非数组对象的指针,或 指向表示这种类的基类的子对象(1.8)的指针 对象(第10条)。如果不是,则行为未定义。