C++如何正确使用智能指针?看完这4个点你就明白了( 五 )
unique_ptr 一个最简单的使用场景是用于类属性 。 代码如下:
class Box{
public:
Box() : w(new Widget())
{
~Box()
{
// 忘记delete w
private:
Widget* w;
;
如果因为一些原因 , w 必须建立在堆上 。 如果用裸指针管理 w , 那么需要在析构函数中delete w; 这种写法虽然没什么问题 , 但是容易漏写 delete 语句 , 造成内存泄漏 。
如果按照 unique_ptr 的写法 , 不用在析构函数手动 delete 属性 , 当对象析构时 , 属性w将会自动释放内存 。
使用场景 2:异常安全
假如我们在一段代码中 , 需要创建一个对象 , 处理一些事情后返回 , 返回之前将对象销毁 , 如下所示:
void process()
{
Widget* w = new Widget();
w->do_something(); // 可能会发生异常
delete w;
在正常流程下 , 我们会在函数末尾 delete 创建的对象 w , 正常调用析构函数 , 释放内存 。
推荐阅读
- 小鱼人|如何在新赛季稳定上分?善于抓失误的小鱼人,值得认真练上一波
- 阴阳师|阴阳师SR川猿强度如何 是否值得抽卡 改变斗技环境 大佬的新玩具
- 手机游戏|梦幻西游手游:活力如何换金币 一切都已给出 就看你的选择
- 华佗|三国杀:两位\奶爸\,朱治与华佗比,强度如何呢?
- 亲朋上分|《亲朋上分》266391亲朋下分亲朋上下分永劫无间崔三娘技能介绍 崔三娘如何获得更多技能
- s6|金铲铲之战:S6双城传说如何才能快速上手?基础知识很关键
- |冰雪传奇:平民玩家四转后如何打金
- 穿越火线|CF:传说武器再度上新,那王者、炫金该如何发展?
- 打野|打野已经被削到几乎不能再削了,到底如何平衡打野位置?
- 电子竞技|新华社对话明凯、阿布,探讨电竞选手是如何炼成的?宁王无辜躺枪