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大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/348471
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!