让我们考虑一下我具有以下功能:
SomeType createSomeType();
根据某些原因可以使用
throw
。然后:
SomeType val = SomeType(); // initial value
try
{
val = createSomeType(); // here
}
catch (std::exception&)
{
}
如果
createSomeType()
抛出,我是否可以始终假定val
值为不变? 最佳答案
是的,如果createSomeType()引发异常,则分配不会发生。控制流将从throw语句开始,经过createSomeType()在堆栈上具有的任何对象的析构函数,最后到达catch语句。