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?
Размотка стека ситуация, для которой RAII был изобретен в первую очередь. Так что это, безусловно, правильный инструмент для этого.
В вашем конкретном случае нет причин, по которым код должен вести себя некорректно. Единственная проблема может возникнуть, если some_callback
опирается на внутренний инвариант Object
который не поддерживается, когда some_function_which_may_throw_exception
на самом деле бросает, но это было бы проблемой конкретного кода и не имеет ничего общего с самим C ++.
Других решений пока нет …