class
Point
{
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; }
private
:
int
x,y;
};
class
RefPtr
{
friend
class
SmartPtr;
RefPtr(Point *ptr):p(ptr), count(1) { }
~RefPtr() {
delete
p; }
int
count;
Point *p;
};
class
SmartPtr
{
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;
}
private
:
RefPtr *rp;
};
int
main()
{
Point *p1 =
new
Point(10, 8);
SmartPtr sp1(p1);
SmartPtr sp2(sp1);
Point *p2 =
new
Point(5, 5);
SmartPtr sp3(p2);
sp3 = sp1;
return
0;
}
使用该方式的内存结构图如下: