我在一个函数中分配了多个资源,因此有很多指针,我必须在离开函数之前返回一个指针(比如说 ret_ptr)并释放其他指针(所有 othr_ptr)。
我在此函数中有多个退出点(其中 ret_ptr 为 0 或指向有效内存或异常)。因此,在所有返回语句和异常(捕获块)之前,我必须删除 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;
}