给对象赋值的问题。
class autoptr{
Person* p;
int cnt;
public:
autoptr(Person* p):p(p),cnt(1){}
autoptr(const autoptr& a):p(a.p){++cnt;}
~autoptr(){if(cnt==1)delete p;}
};
int main()
{
autoptr a = new Person;//a.cnt = 1
autoptr b = a;//b.cnt = 2
autoptr c = a;//c.cnt = 2
}
但是运行结果 b.cnt c.cnt 是随机值 求解释
[解决办法]
不过你写的这个计数指针不会正常工作,因为计数器有多份:
x->a = new Person;//x->a.cnt = 1
y->b = x->a;//y->b.cnt = 2(假设你已经修改了前面的错误),但这时x->a.cnt依然等于1
z->c = x->a;//x->a.cnt = 2同上
delete x;//调用a的析构函数,由于x->a.cnt为1,x->a.p被delete,尽管它还在被b和c使用。