??????????????????????????????ptr1??”???“???????????????????????????????????????и?????ptr1?????????????????????????????????????????????????????????????????????????????????????

???????????????????????????????????????????????????????????????????????????????????????????
???????????ü???
?????????????????????????????????????????????????????ü??????????????ü????????????????????????ж??????????????????????????ü???????ó???????????
????????????У????C++??new??????????????????????????????????new?????????????????????????????????????????????????????????delete???????????????????ж??????????????????????????????????????????ü???????????????????????????????????????????ü????????????????????????????????????????
?????????棬??????????Ч?????κ???????????????????????????洢????????????????????????????????????????????????????C++???????string?????????”д?????“????????????е????????????????????????????????????????????????????????????????ü???????????????????????????????????????Χ??
??????????????
????????????ü???????????????????д???????????????????????????????????????????????????????????????????????
??????????????
????????????????????????????????Point??????????????????????????????Ч???????Point???????????
????class Point
????{
????private:
????int x?? y;
????public:
????Point(int xVal = 0?? int yVal = 0) :x(xVal)?? y(yVal) { }
????int getX() const { return x; }
????int getY() const { return y; }
????void setX(int xVal) { x = xVal; }
????void setY(int yVal) { y = yVal; }
????};
??????????
?????????????????????????????????????????????????г????????????????????????????????á?????????????????????????????????????????????????????????????????????????????count?????????????????????????????ü???????????????
????class U_Ptr
????{
????private:
????friend class SmartPtr;
????U_Ptr(Point *ptr) :p(ptr)?? count(1) { }
????~U_Ptr() { delete p; }
????int count;
????Point *p;
????};
???????????????????????????
???????ü?????????????????????÷??????????????????????????????????????????ü?????????ж??????????????????????????????£?
????????????????????????????????????ü????????1
???????????????????????????????????????????????????????????????????ü???????1??
??????????????????????????и??????????????????????????????????ü?????1????μ?1???????????????????????????1?????ü????0???????????????????檔?????????????????????????ü????????????????????????????????????????????????
???????????????????????????????????????????ü?????1?????????0??delete????
?????????????????????????????????????Point??д??????????????????????ü?????????????????д???????????????????£?
{
public:
SmartPtr(Point *ptr) :rp(new RefPtr(ptr)) { }
SmartPtr(const SmartPtr &sp) :rp(sp.rp) { ++rp->count; }
SmartPtr& operator=(const SmartPtr& rhs) {
++rhs.rp->count;
if (--rp->count == 0)
delete rp;
rp = rhs.rp;
return *this;
}
~SmartPtr() {
if (--rp->count == 0)
delete rp;
else
cout << "????" << rp->count << "???????????????" << endl;
}
private:
RefPtr *rp;
};