这个概念其实很简单的,用引用计数来标志一个对象被引用的次数,当没有被引用时,就可以删除掉。比如类String包含StringData,当String类构造时,new一个StringData,此时在StringData中的引用计算为1,当String析构时,减少关联的StringData的引用。简单的写就是这样
class StringData
{
public:
StringData { ref = 1; data = new char[128]; }
void AddRef() { ref++; }
void SubRef( ref--; if (ref == 0) { delete data; data = NULL; } )
private:
int ref;
char* data;
}
class String
{
String() { m_data = new StringData; }
~String() { m_data->SubRef(); }
private:
StringData *m_data;
}