我在函数中分配了多个资源,因此有很多指针,我必须返回一个指针(让他们说ret_ptr)并在离开函数之前释放其他指针(所有othr_ptrs)。
我在此函数中有多个退出点(其中ret_ptr为0或指向有效内存或异常)。因此在所有返回语句和异常(catch块)之前我必须删除othr_ptrs(在函数中多次执行)。是否有任何方式使用" ScopeGuards"我可以减少多次清理吗?
X* func()
{
try
{
A* a = new ..;
B* b = new ..;
if (something)
{
delete a;
delete b;
return 0; // return NULL ptr
}
X* x = new ..;
}
catch(...)
{
delete a;
delete b;
return x;
}
delete a;
delete b;
return x;
}
答案 0 :(得分:1)
您可以使用std::unique_ptr
(C ++ 11),您的示例变为:
std::unique_ptr<X> func()
{
std::unique_ptr<X> x;
try
{
std::unique_ptr<A> a(new A);
std::unique_ptr<B> b(new B);
if (something)
{
return nullptr;
}
x.reset(new X);
}
catch (...)
{
return std::move(x);
}
return std::move(x);
}