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

标签 c++ exception destructor raii 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++ 本身无关。

关于c++ - 在堆栈展开时使用 RAII 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38137754/

相关文章:

c++ - 在多行中 C++

c++ - 如何对项目列表很长的文件进行排序?

c++ - 在 CPP 文件中使用 make 文件字符串变量

java - Neo4j获取TransactionEventHandler的信息

java - int 上出现 NullPointerException?

c++ - 一个进程是否有可能在 Windows 上捕获另一个进程的未处理异常?

c++ - "replaced"变量何时不再可寻址

c++ - 类是否应该具有双重破坏的弹性?

c++ - 链表的析构函数

c++ - 在无尽的 C++ 程序中线程化