aihot  2020-11-12 09:23:36  OpenCV |   查看评论   
int priority(); void processWidget(shared_ptr<Widget>pw, int priority);

现在假如我们这样调用它:

processWidget(share_ptr<Widget>(new Widget),priotrity());

在调用processWidget之前,编译器必须创建代码,做以下三件事:

  • 调用priority
  • 执行”new Widget”
  • 调用shared_ptr构造函数

C++编译器并不保证上次代码执行的次序,但有一点可以保证,那就是new Widget肯定发生成share_ptr构造函数之前。

假如priority发生在第二步,并且执行过程中发生了异常,那就有可能资源不能正常的释放。

避免这种情况,就需要使用分离语句,先创建Widget,然后再将它置入一个智能指针内,然后再把那个智能指针传给processWidget。

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自Effective C++笔记:资源管理

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]