boost 智能指针

来源:互联网 发布:电力系统保护计算软件 编辑:程序博客网 时间:2024/05/29 08:21

最近使用boost的智能指针,查看了一些帖子。总结如下:

智能指针分类:http://developer.51cto.com/art/201012/239004.htm

智能指针使用注意事项:http://blog.sina.com.cn/s/blog_45497dfa0101egbu.html

多线程安全性分析:http://blog.csdn.net/jiangfuqiang/article/details/8292906

                                 http://my.oschina.net/costaxu/blog/103119  (这个帖子的结论很好,

                                                   1 shared_ptr是一个非常实用的智能指针。

                                                   2 shared_ptr的实现机制是在拷贝构造时使用同一份引用计数。

                                                   3 对同一个shared_ptr的写操作不是线程安全的。 对使用同一份引用计数的不同shared_ptr是线程安全的。

                                                   )

封装有基类、子类的智能指针类型转换:http://blog.csdn.net/bopzhou/article/details/6748763

                                                                 http://blog.csdn.net/clever101/article/details/6950050


经过几天的试用,最终决定放弃在系统中使用boost::shared_ptr<T>.原因如下:

1.因为boost::shared_ptr<T>是以boost::shared_ptr<T>(T* p)建立智能指针,调用两次就会生成对于T* p的两个引用计数,比较危险。

2.总有情况需要将类内使用boost::shared_ptr<T>保存的对象取出,如果返回指针,出现情况1.如果返回boost::shared_ptr<T>引用,又存在A是T的子类,boost::shared_ptr<T>和boost::shared_ptr<A>互转的情况,很麻烦,而且处理不好很容易出错,对于使用系统的用户使用是个很不好的选择。

3.总有情况是对象要返回自身的智能指针(以this参数)。这时会返回boost::shared_ptr<Edge>(this),结果依据第一个原因,这种情况一定会生成两个计数,也就一定会出错。

所以boost::shared_ptr<T>这种非插入式(辅助式)只适合小范围、局部使用。插入式(句柄)指针才适合系统使用(上些大型的c++开源库,如vtk/osg均使用此方法)。



0 0
原创粉丝点击