3
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 的状态会好吗?

4

1 回答 1

6

堆栈展开是RAII最初发明的情况。所以它肯定是合适的工具。

在您的特定情况下,没有理由代码行为不正确。some_callback如果依赖于在实际抛出Object时未维护的内部不变量,则可能会出现唯一some_function_which_may_throw_exception的问题,但这将是特定代码的问题,与 C++ 本身无关。

于 2016-07-01T06:15:58.057 回答