永发信息网

关于智能指针中的delete问题

答案:2  悬赏:60  手机版
解决时间 2021-03-01 01:49
#include using namespace std; class hasptr { friend class aa; int *p2; int use; hasptr(int *p1):p2(p1),use(1){} ~hasptr() { cout<<"hasptr"<use; } aa& operator=(const aa &v) { ++v.p->use; i订畅斥堆俪瞪筹缺船画f (--p->use==0) { delete p; } p=v.p; return *this; } ~aa(){ if (--p->use==0) { cout<<"aa"<
最佳答案
  • 五星知识达人网友:走死在岁月里
  • 2021-02-28 20:27
我觉得问题在于您赋给v1的指针是个堆栈指针,所以delete出错。

比如如果改成下面的方式应该就好了:
void main()
{
int* a = new i订畅斥堆俪瞪筹缺船画nt;
*a = 5;

aa v1(a);
aa v2(v1);
}

或者在hasptr的构造函数里面申请内存(不改main函数):
hasptr(int *p1) : use(1)
{
p2 = new int;
*p2 = *p1;
}
全部回答
  • 1楼网友:蓝房子
  • 2021-02-28 20:52
我觉得问题在于您赋给v1的指针是个堆栈指针,所以delete出错。 比如如果改成下面的方式应该就好了: void main() { int* a = new int; *a = 5; aa v1(a); aa v2(v1); } 或者在hasptr的构造函数里面申请内存(不改main函数): hasptr(int *p1) : use(1) { p2 = new int; *p2 = *p1; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯