如下:
class A{};
int main(){
A* a=new A();
delete a;
return 0;
}
这样是没有问题的,但是下面这样会抛异常:
class A{};
int main(){
A a=*new A();
delete &a;
return 0;
}
请问这是什么原因,不都是释放指针指向的内存区域吗?
如下:
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