class AutoSomething
{
public:
AutoSomething(Object& ob)
: object_(object)
{}
~AutoSomething()
{
object_.some_callback();
}
private:
Object& object_;
};
.........
void Object::some_function()
{
AutoSomething some(*this);
some_function_which_may_throw_exception();
}
问题是 - 当调用 AutoSomething 的析构函数时,Object 的状态是否正常?
最佳答案
堆栈展开是 RAII 最初发明的情况。因此,它无疑是最合适的工具。
在您的特定情况下,没有理由说明代码的行为不正确。唯一的问题可能是 some_callback
依赖于 Object
的内部不变量,而当 some_function_which_may_throw_exception
实际抛出时它不会被维护,但这将是一个问题特定代码,与 C++ 本身无关。
关于c++ - 在堆栈展开时使用 RAII 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38137754/