我的代码需要范围守卫,但是我是否必须手动 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;
}
最佳答案
你必须在函数结束后解散你想要存活的对象的守卫。否则他们将各自删除他们正在守卫的对象。
关于c++ - ScopeGuard 解雇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5269484/