MoreEffectiveC++之引用计数

MoreEffectiveC++之引用计数,第1张

MoreEffectiveC++之引用计数,第2张

引用计数让我想起了Java。如果想用C++实现Java的能力,必不可少。引用计数可以节省程序的运行成本,省略了大量的构建、销毁、分发、发布和复制的成本。

实现

classRCObject
{
public:
RC object():ref count(0),shareable(true){ }
RC object(constr object &):ref count(0),shareable(true){ }
RC object & operator =(constr object & RHS){ return * this;}
virtual ~ RC object()= 0;
void add reference(){ ++ ref count;}
void remove reference(){ if(-ref count = = 0)delete this;}

void markUnshareable(){ shareable = false;}
bool is shareable()const { return shareable;}
bool is shared()const { returnrefCount > 1;}
private:
int refCount;
bool shareable;
};
RCObject::~RCObject(){}

template
class RCPtr
{
public:
RCPtr(T * realPtr = 0):pointee(realPtr){ init();}
RCPtr(constcptr & RHS):指针对象(RHS . pointee){ init();}
~RCPtr(){if(指针对象)指针对象-> remove reference();}
RCPtr & operator =(constcptr & RHS)
{
if(指针对象!= RHS . pointee)
{
if(pointee)
pointee-> remove reference();
指针对象= rhs .指针对象;
init();
}
return * this;
}
T * operator-->()const { return pointee;}
T & operator *]const { return * pointee;}
private:
T * pointee;
void init()
{
if(pointee = = 0)
return;
if(指针对象->isShareable() == false)
指针对象= newT(*指针对象);
指针对象-> add reference();
}
};

类String
{
public:
String(const char * value = " ":value(newStringValue(value)){ }
const char & operator[](intnIndex)const
{
返回值-> data[nIndex];
}
char & operator[](intnIndex)
{
if(value-> is shared())
value = new string value(value-> data);
value-> markunshare();
return value-> data[nIndex];
}
protected:
private:
struct string value:public rcobject
{
char * data;
字符串值(const char * init Value)
{
init(init Value);
}
字符串值(const String Value & RHS)
{
init(RHS . data);
}
void init(const char * init value)
{
data = new char[strlen(init value)+1];
strcpy(data,init value);
}
~ String Value()
{
delete[]data;
}
};
RCPtr值;
};

这是Meyers给出的String的实现。但我的看法是,如果不是特别必要,引用计数不应该用于stirng,因为多线程程序中同步的代价大于引用计数本身的收益,得不偿失。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » MoreEffectiveC++之引用计数

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情