在堆栈展开时使用 RAII 是否安全?

Is it safe to use RAII while stack unwinding?

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++ 本身。