C++如何正确使用智能指针?看完这4个点你就明白了( 六 )
但是如果 w->do_something()发生了异常 , 那么delete w将不会被执行 。 此时就会发生内存泄漏 。 我们当然可以使用 try...catch 捕捉异常 , 在 catch 里面执行 delete , 但是这样代码上并不美观 , 也容易漏写 。
如果我们用 std::unique_ptr , 那么这个问题就迎刃而解了 。 无论代码怎么抛异常 , 在 unique_ptr 离开函数作用域的时候 , 内存就将会自动释放 。
shared_ptr:共享所有权
在使用 shared_ptr 之前应该考虑 , 是否真的需要使用 shared_ptr 而非 unique_ptr 。
shared_ptr 代表的是共享所有权 , 即多个 shared_ptr 可以共享同一块内存 。 因此 , 从语义上来看 , shared_ptr 是支持复制的 。 如下:
auto w = std::make_shared<Widget>();
{
auto w2 = w;
cout << w.use_count() << endl; // 2
推荐阅读
- 小鱼人|如何在新赛季稳定上分?善于抓失误的小鱼人,值得认真练上一波
- 阴阳师|阴阳师SR川猿强度如何 是否值得抽卡 改变斗技环境 大佬的新玩具
- 手机游戏|梦幻西游手游:活力如何换金币 一切都已给出 就看你的选择
- 华佗|三国杀:两位\奶爸\,朱治与华佗比,强度如何呢?
- 亲朋上分|《亲朋上分》266391亲朋下分亲朋上下分永劫无间崔三娘技能介绍 崔三娘如何获得更多技能
- s6|金铲铲之战:S6双城传说如何才能快速上手?基础知识很关键
- |冰雪传奇:平民玩家四转后如何打金
- 穿越火线|CF:传说武器再度上新,那王者、炫金该如何发展?
- 打野|打野已经被削到几乎不能再削了,到底如何平衡打野位置?
- 电子竞技|新华社对话明凯、阿布,探讨电竞选手是如何炼成的?宁王无辜躺枪