看了vczh的共享指针的实现,我大概理解为 用一段共享内存来实现一切。这一段共享内存包含的内容包括:
1,真正的数据
2,4个字节的引用计数
任何指向这段共享内存的指针都有权利修改这段内存的内容,比如
1,当有新指针指向这块内存的时候,如拷贝构造函数,或是被右值赋值的函数operator =,新的对象都应该去把
共享内存中引用计数加1。注意这里右值被拷贝过来的时候,this是能操作这块共享内存的,所以计数的加减都
很容易操作的。
2,在当前的指针逃脱这块共享内存的时候,要把这里的引用计数减1,当减到0的时候,释放所有的内存。所以operator=
应该是先减去现在的引用计数,再增加新的引用计数
大概的结构如下:
class share_ptr
{
T* pSharedData;
int* pSharedCnt;
};
vczh的文章在这里
http://www.cppblog.com/vczh/archive/2010/06/24/118635.html