为什么c++ delete只能删除new操作返回的指针,不能删除用取地址符得到的指针?

如下:

class A{};

int main(){

A* a=new A();

delete a;

return 0;

}

这样是没有问题的,但是下面这样会抛异常:

class A{};

int main(){

A a=*new A();

delete &a;

return 0;

}

图片说明

请问这是什么原因,不都是释放指针指向的内存区域吗?

回答

因为

A a,这在堆栈上定义了一个a对象实例

= *new A();

调用了拷贝构造函数

但是a还是堆栈上,而不是堆上那个分配的对象。

所以不能delete

以上是 为什么c++ delete只能删除new操作返回的指针,不能删除用取地址符得到的指针? 的全部内容, 来源链接: utcz.com/a/35194.html

回到顶部