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.