您的位置:首页 > 编程语言 > C语言/C++

C++句柄代码实现(1)

2017-03-18 13:03 330 查看
欢迎转载请注明出处:海漩涡
http://blog.csdn.net/tanhuifang520
C++句柄代码实现(1)

C++句柄
作用:解决代理类中,创建代理时复制所有代理对象的问题

#include
using namespace std;

class Point{
public:
Point():xval(0){}
Point(int _x):xval(_x){}
Point &x(int _x){ xval = _x; return *this;}
int x(){ return xval; }
private:
int xval;
};

class UPoint{
// 所有成员为私有
friend class Handle;
UPoint():u(1){}
UPoint(int _x):u(1),P(_x){}
UPoint(Point &p0):u(1),P(p0){}
int u;
Point P;
};

class Handle{
public:
Handle():up(new UPoint){}
Handle(int _x):up(new UPoint(_x)){}
Handle(Point &p0):up(new UPoint(p0)){}
Handle(Handle &h):up(h.up){ up->u++; }
~Handle(){ if(0 == --up->u) delete up;}
Handle& operator=(const Handle &h)
{
if(0 == --up->u)
delete up;

up = h.up;
up->u++;
}
int x()
{
return up->P.x();
}
#if 1
// 指针语义
Handle& x(int _x)
{
up->P.x(_x);
return *this;
}

#else
// 值语义
Handle& x(int _x)
{
if(1 != up->u)
{
up->u--;
up = new UPoint(up->P);
}
up->P.x(_x);
return *this;
}
#endif
private:
UPoint *up;
};

int main()
{
Handle h(3);
Handle h1 = h;
h1.x(5);
cout<<"h.x = "<
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: