ScopeGuard解雇

时间:2011-03-11 05:56:09

标签: c++ 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 个答案:

答案 0 :(得分:1)

在功能完成后,您必须关闭要保持活动的对象的防护。否则他们将删除他们守卫的对象。

答案 1 :(得分:0)

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