1、为什么?

  考虑下面的情况:方法声明为void processWidget(shared_ptr<Widget> pw,int priority)。

  调用方法 processWidget(shared_ptr<Widget> (new Widget), getPriority()),在调用方法之前,要做三件事:

  a、执行new Widget

  b、调用shared_ptr的构造方法

  c、调用方法getPriority()

  可问题是:C++不保证上面的执行顺序(C#,Java保证)。那么问题就来了,如果是acb的执行顺序,并且c步骤异常,那么new出来的资源还没有放进资源管理类,导致内存泄漏。

2、如何解决上面的问题?

  分开上面的语句,shared_ptr<Widget> pw(new Widget);

          processWidget(pw, getPriority())

【17】以独立语句将newed对象置入智能指针的更多相关文章

  1. Effective C++ 条款17 以独立语句将newed对象置入智能指针

      对于函数: int priority(); void processWidget(std::tr1::  shared_ptr<Widget> pw,int priority); 调用 ...

  2. Effective C++(17) 以独立语句将newed对象置入智能指针

    问题聚焦:     使用了资源管理对象(如智能指针),就一定是安全的吗?显然不是.     资源泄露发生可能在于,在“资源被创建”和“资源被转换为资源管理对象”两个时间点之间有可能发生异常干扰. 看下 ...

  3. 条款17:以独立语句将newed对象置入智能指针(Store newed objects in smart pointers in standalone statements)

    NOTE: 1.以独立语句将newed对象存储于智能指针内.如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄漏.

  4. [Effective C++ --017]以独立语句将newed对象置入智能指针

    这一节也比较简单,先假设我们有如下的函数: int foo(); void memFoo(shared_ptr<T> pw, int foo); 现在假设我们要调用memFoo函数: me ...

  5. Effective C++ -----条款17:以独立语句将newed对象置入智能指针

    以独立语句将newed对象存储于(置入)智能指针内.如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露.

  6. 条款17:以独立语句将newed对象置入智能指针

    请牢记: 以独立语句将newed对象存储于(置入)智能指针内.如果不这样做,一旦异常被跑出来,有可能导致难以察觉的资源泄露. 假设有个函数用来处理程序的优先权,另一个函数用来在某动态分配所得的Widg ...

  7. 《Effective C++》——条款17:以独立语句将newed对象置入智能指针

    假设有如下两个函数: int priority(); void processWidget(std::tr1::shared_ptr<Widget>pw, int priority); 对 ...

  8. [EffectiveC++]item17:以独立语句将newed对象置入智能指针

    Store newed objects in smart pointers in standalone statements

  9. 以独立的语句将new对象置入智能指针

    以独立的语句将newed对象置入智能指针: processWidget(std::tr1::share_ptr<Widget>(new Widget) , priority()); 我们在 ...

随机推荐

  1. Android Service的生命周期

    service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A started service 被开启的service通过其他组件调用 startService()被创建. 这种 ...

  2. Android UI性能优化详解

    设计师,开发人员,需求研究和测试都会影响到一个app最后的UI展示,所有人都很乐于去建议app应该怎么去展示UI.UI也是app和用户打交道的部分,直接对用户形成品牌意识,需要仔细的设计.无论你的ap ...

  3. web storm使用和配置

    官网:http://www.jetbrains.com/webstorm/ webStorm,File=>setting=>JavaScript-Libraries How WebStor ...

  4. 【HDOJ】3337 Guess the number

    神一样的题目.简言之,利用手段获得测试用例的第一行,输出结果.很显然利用wa, TLE, OLE等judge status可以获得测试用例.因此,果断Python写一个acm提交机器人.依赖lxml库 ...

  5. simplified build configuration

    http://blogs.msdn.com/b/saraford/archive/2005/08/16/452411.aspx Did you know… That you can hide the ...

  6. VMwareWorkstation10安装OS_X_Mavericks10.9.2图文详细教程

    一.VMware的环境配置...        1.1安装VMware的MAC OS补丁...        1.2建立虚拟机... 二.OS_X_Mavericks的安装及安装驱动...      ...

  7. 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途

    原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...

  8. Setting Up the ADT Bundle

    Setting Up the ADT Bundle The ADT Bundle provides everything you need to start developing apps, incl ...

  9. lightoj 1010

    题意,在一个n*n的棋盘上放置一些马,使这些马不能互相攻击,问最多能放多少. 思路:从第一行每隔一个放置一个马即可,注意n=1和n=2的情况要特判. #include<cstdio> in ...

  10. Web---JSP-EL表达式

    EL表达式简介 EL 全名为Expression Language. EL主要作用: 获取数据: EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的java对象中获取数据. 执行运算: 利 ...