其他分享
首页 > 其他分享> > c – 堆栈展开时使用RAII是否安全?

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

作者:互联网

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本身无关.

标签:raii,c,destructor,exception,stack-unwinding
来源: https://codeday.me/bug/20190824/1704051.html