让我们考虑一下我具有以下功能:

SomeType createSomeType();

根据某些原因可以使用throw

然后:
SomeType val = SomeType(); // initial value

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

如果createSomeType()抛出,我是否可以始终假定val值为不变

最佳答案

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

10-04 10:13