ScopeGuard уволить - PullRequest
       31

ScopeGuard уволить

0 голосов
/ 11 марта 2011

Мой код нуждается в ограничителях области действия, однако нужно ли вручную Dismiss() все ограничители области действия при выходе из функции нормально?то есть

void Deleter(MyClass* obj)
{
    delete obj;
}

MyClass* Func()
{
    MyClass* obj = new MyClass();
    ScopeGuard sg1 = MakeObjGuard(Deleter, obj);

    //More objects created. And more scope guards.

    sg1.Dismiss();
    //...Same for other guards
    return obj;
}

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Вы должны уволить охранников за объекты, которые вы хотите остаться в живых после функции.В противном случае каждый из них удалит охраняемый объект.

0 голосов
/ 11 марта 2011

Учитывая эту реализацию ScopeGuard, тогда ответ - да.Удаление объекта произойдет в деструкторе ScopeGuard, если вы не отключите его, вызвав метод Dismiss.

...