focus on linux, c/c++, lua

用一段共享内存来实现共享指针

看了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

posted on 2010-06-25 15:35 zuhd 阅读(1594) 评论(0)  编辑 收藏 引用 所属分类: c/c++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理