我的代码需要范围保护,但是我必须手动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;
}
答案 0 :(得分:1)
在功能完成后,您必须关闭要保持活动的对象的防护。否则他们将删除他们守卫的对象。
答案 1 :(得分:0)
鉴于ScopeGuard的this implementation,答案是肯定的。删除对象将发生在ScopeGuard的析构函数中,除非您通过调用Dismiss方法禁用它。