代码之家  ›  专栏  ›  技术社区  ›  ereOn

矫揉造作和例外

  •  5
  • ereOn  · 技术社区  · 15 年前

    SomeType createSomeType();
    

    它可以 throw 取决于某些原因。

    然后:

    SomeType val = SomeType(); // initial value
    
    try
    {
      val = createSomeType(); // here
    }
    catch (std::exception&)
    {
    }
    

    createSomeType() 投掷,我能一直假设 val 价值是 不变的 ?

    3 回复  |  直到 15 年前
        1
  •  7
  •   Ferruccio    15 年前

    是的,如果createSomeType()引发异常,则不会发生赋值。控制流将从throw语句开始,经过堆栈上createSomeType()的任何对象的析构函数,最后到达catch语句。

        2
  •  1
  •   sharptooth    15 年前

    如果 SomeType val 将分配一个一致的新值或其初始值保持不变。

    createSomeType() 或是在 创建SomeType() 运行成功。如果 是重载的,它可能会抛出异常 瓦尔 基类型 设计虽不好但仍有可能发生。

        3
  •  0
  •   liaK    15 年前

    当控件从抛出表达式传递到处理程序时, 对所有构造的自动对象调用析构函数 自动对象按其完成的相反顺序被销毁

    因此 val 价值,不会改变。。。

    推荐文章