C++如何正确使用智能指针?看完这4个点你就明白了( 九 )
1. shared_ptr 通常使用在共享权不明的场景 。 有可能多个对象同时管理同一个内存时 。
2. 对象的延迟销毁 。 陈硕在《Linux 多线程服务器端编程》中提到 , 当一个对象的析构非常耗时 , 甚至影响到了关键线程的速度 。 可以使用BlockingQueue<std::shared_ptr<void>>将对象转移到另外一个线程中释放 , 从而解放关键线程 。
shared_from_this
我们往往会需要在类内部使用自身的 shared_ptr , 例如:
class Widget
{
public:
void do_something(A& a)
{
a.widget = 该对象的shared_ptr;
我们需要把当前 shared_ptr 对象同时交由对象 a 进行管理 。 意味着 , 当前对象的生命周期的结束不能早于对象 a 。 因为对象 a 在析构之前还是有可能会使用到a.widget 。
如果我们直接a.widget = this; , 那肯定不行 , 因为这样并没有增加当前 shared_ptr 的引用计数 。 shared_ptr 还是有可能早于对象 a 释放 。
推荐阅读
- 小鱼人|如何在新赛季稳定上分?善于抓失误的小鱼人,值得认真练上一波
- 阴阳师|阴阳师SR川猿强度如何 是否值得抽卡 改变斗技环境 大佬的新玩具
- 手机游戏|梦幻西游手游:活力如何换金币 一切都已给出 就看你的选择
- 华佗|三国杀:两位\奶爸\,朱治与华佗比,强度如何呢?
- 亲朋上分|《亲朋上分》266391亲朋下分亲朋上下分永劫无间崔三娘技能介绍 崔三娘如何获得更多技能
- s6|金铲铲之战:S6双城传说如何才能快速上手?基础知识很关键
- |冰雪传奇:平民玩家四转后如何打金
- 穿越火线|CF:传说武器再度上新,那王者、炫金该如何发展?
- 打野|打野已经被削到几乎不能再削了,到底如何平衡打野位置?
- 电子竞技|新华社对话明凯、阿布,探讨电竞选手是如何炼成的?宁王无辜躺枪