Безопасно ли использовать 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?

3

Решение

Размотка стека ситуация, для которой RAII был изобретен в первую очередь. Так что это, безусловно, правильный инструмент для этого.

В вашем конкретном случае нет причин, по которым код должен вести себя некорректно. Единственная проблема может возникнуть, если some_callback опирается на внутренний инвариант Object который не поддерживается, когда some_function_which_may_throw_exception на самом деле бросает, но это было бы проблемой конкретного кода и не имеет ничего общего с самим C ++.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]