使用delete调用析构函数

Tug*_*.44 2 c++ destructor delete-operator

执行以下操作是否正确:

MyClass mc1(1, 1);
MyClass* pmc1 = &mc1;
delete pmc1;
Run Code Online (Sandbox Code Playgroud)

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

4pi*_*ie0 7

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

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

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