0

我的代码需要范围保护,但是我是否必须Dismiss()在正常退出函数时手动所有范围保护?IE

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;
}
4

2 回答 2

1

您必须在功能结束后解除您想要保持活力的对象的守卫。否则,他们将各自删除他们正在保护的对象。

于 2011-03-11T06:17:26.180 回答
0

鉴于ScopeGuard 的这种实现,那么答案是肯定的。对象删除将发生在 ScopeGuard 的析构函数中,除非您通过调用 Dismiss 方法禁用它。

于 2011-03-11T06:10:36.880 回答