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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月07日 09时18分27秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【Leetcode刷题篇】leetcode316 去除重复字母
2019-04-26
【Leetcode刷题篇】leetcode1081 不同字符的最小子序列
2019-04-26
【面试篇】Java网络编程与IO流体系
2019-04-26
【大话Mysql面试】-Mysql的索引为什么要使用B+树,而不是B树,红黑树等之类?
2019-04-26
【大话Mysql面试】-如何通俗易懂的了解Mysql的索引最左前缀匹配原则
2019-04-26
【大话Mysql面试】-MYSQL的两种存储引擎MyISAM与InnoDB的区别是什么?
2019-04-26
理解String.intern()和String类常量池疑难解析例子
2019-04-26
python flask打造前后端分离的口罩检测
2019-04-26
【大话Mysql面试】-MySQL基础知识
2019-04-26
【大话Mysql面试】-MySQL数据类型有哪些
2019-04-26
【大话Mysql面试】-MySQL数据引擎
2019-04-26
【大话Mysql面试】-常见SQL语句书写
2019-04-26
【大话Mysql面试】-SQL语句优化
2019-04-26
【大话Mysql面试】-Mysql事务以及隔离级别
2019-04-26
【大话Mysql面试】-Mysql索引
2019-04-26
【大话Mysql面试】-Mysql锁
2019-04-26
【大话Mysql面试】-Mysql常见面试题目
2019-04-26
08 【多线程高并发】Java线程间通信的方式
2019-04-26