以独立语句将new对象置入只能指针

process(shared_ptr<Widget>(new Widget),priority());

上述代码中,虽然我们使用了智能指针来管理new Widget分配回来的资源,但是上述调用方式依然存在资源泄露的问题。

这是因为C++编译器可能以不同的操作序列来完成这件事。可能的序列如下:

1.执行new Widget

2.调用priority

3.调用shared_ptr的构造函数

如果priority的调用导致异常,会发生什么事?在此情况下,new Widget返回的指针将会遗失,因为它尚未置入sharted_ptr中,后者是我们用来防卫资源泄露的武器。

为了避免这个问题,使用简单的分离语句,即

shared_ptr<Widget> pw(new Widget);
process(pw, priority());

这样,由于编译器对于跨越语句的各项操作没有重新排列的自由,只有在语句之内才拥有那个自由度,所以上述方法行得通。

原文链接: https://www.cnblogs.com/cs0915/p/12888034.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    以独立语句将new对象置入只能指针

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/348471

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午5:04
下一篇 2023年3月2日 上午5:05

相关推荐