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