Boost智能指针——shared_ptr
发布日期:2021-10-10 05:31:24 浏览次数:51 分类:技术文章

本文共 1154 字,大约阅读时间需要 3 分钟。

Boost智能指针——shared_ptr

文章目录

引言

boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:

#include 
#include
#include
class Test{public: ~Test() { std::cout <<"destroying Test\n"; } void do_something() { std::cout << "did something\n"; }};void test(){ boost::shared_ptr
sp1(new Test()); std::cout<<"The Sample now has "<
<<" references\n"; boost::shared_ptr
sp2 = sp1; std::cout<<"The Sample now has "<
<<" references\n"; sp1.reset(); std::cout<<"After Reset sp1. The Sample now has "<
<<" references\n"; Test* t = sp2.get(); t->do_something(); sp2->do_something(); sp2.reset(); std::cout<<"After Reset sp2.\n";}int main(int argc, char ** argv){ test(); return 0;}

可以看到,boost::shared_ptr指针sp1和sp2同时拥有了implementation对象的访问权限,且当sp1和sp2都释放对该对象的所有权时,其所管理的的对象的内存才被自动释放。在共享对象的访问权限同时,也实现了其内存的自动管理。

内存管理机制

boost::shared_ptr的管理机制其实并不复杂,就是对所管理的对象进行了引用计数,当新增一个boost::shared_ptr对该对象进行管理时,就将该对象的引用计数加一;减少一个boost::shared_ptr对该对象进行管理时,就将该对象的引用计数减一,如果该对象的引用计数为0的时候,说明没有任何指针对其管理,才调用delete释放其所占的内存。

转载地址:https://blog.csdn.net/qq_22054285/article/details/87099726 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:laxical_cast使用
下一篇:机器学习 数据预处理之One-Hot Encoding

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月07日 09时18分27秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章