![]() |
#2
玩出来的代码2011-08-04 19:50
|
5L的解释是:
char *p=new char[20];
char *q=new char[20];
HasPtr a(p,0);
HasPtr b(q,0);
a=b;//看这句,会调用赋值重载,那么a所指的对内存是不是要释放呢,你若不调用delete 怎么释放呢,调用函数时b的计数+1,a的-1,那么a.ptr->use为0了调用析构函数释放内存,
若有这样一句,a=a;//这个就是自身赋值了,只有这种情况下,在重载+中用delete 后面的三句才不会有问题的。因为堆中的内存还有对象在使用。、、我也不知道你明白了没。
=========
只有本站会员才能查看附件,请 登录
1.if语句中是如果use==0了就调用析构函数释放,那么如果自减之后依然不是0呢,就不会调用析构函数,但是依然会执行后面的prt=rhs.ptr。。。有什么意思?
2.还有截图上说的先让rhs.ptr自加是为了防止自身赋值,那请问是怎么样防止的?
麻烦哪位大侠能够解释下
