ScopeGuard уволить

Мой код требует ограждения области видимости, однако я должен вручную 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 ответа

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

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

Другие вопросы по тегам