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的状态是否正常?
答案 0 :(得分:6)
堆叠展开是 的位置,首先发明了RAII。所以它肯定是适当的工具。
在您的特定情况下,没有理由为什么代码行为不正确。如果some_callback
依赖于Object
的内部不变量,而some_function_which_may_throw_exception
实际抛出时不会保留,则会出现唯一的问题,但这会导致特定代码出现问题而与此无关C ++本身。