zoukankan      html  css  js  c++  java
  • 条款17:以独立的语句将资源置入智能指针。

    先可考虑下下面这个语句:

     
    1 int prioriy();
    2 processWidget(shared_ptr<Widget>(new Widget), priority());
    上面这条语句看似比较正常,不会泄露资源,但是实际上并非如此。
    调用上面这个语句的时候基本上分成三步:
    1. new Widget 
    2. 根据Widget对象指针来构造shared_ptr
    3. 调用priority();
    但是c++与java不一样,不一定保证上述语句三部的执行步骤,所以下面这种情况也是可能的:
    1. new Widget
    2. 调用priority()
    3. 根据Widget对象指针来构造shared_ptr
    那么问题来了:
    如果调用priority的时候抛出遗产,那么Widget资源可能就永远泄露了!!
    所以避免这一类问题的方法很简单,就是把这两个步骤分开来写:
    1 shared_ptr<Widget> pWgt(new Widget);
    2 processWidget(pWgt, priority());
      这样就可以高枕无忧了.
     
    小结:
      以独立的语句将对象存储于智能指针中,如果不这么做,那么异常一旦抛出,可能导致难以察觉的资源泄露
  • 相关阅读:
    Codeforces 474B. Worms
    Codeforces 577A
    Codeforces 455A
    Codeforces 540A
    Codeforces 832A. Sasha and Sticks
    51Nod 1137 矩阵乘法
    51Nod 1118 机器人走方格
    Tomcat部署项目的三种方式
    【Linux】CentOS7下安装JDK详细过程
    Linux上安装rz和sz命令
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4857552.html
Copyright © 2011-2022 走看看