为什么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