I have multiple resources allocated in a function, therefore quite a few pointers and out of which I have to return one pointer (let's say ret_ptr) and deallocate others (all othr_ptrs) before leaving the function.
I have multiple exit points in this function (where ret_ptr is 0 or it is pointing to a valid memory or an exception). Therefore before all the return statements and in the exception(catch block) I have to delete the othr_ptrs (doing multiple times in the function). Is there any way with "ScopeGuards" I could reduce the multiple clean-ups ?
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;
}
You may use
std::unique_ptr
(C++11), your example becomes something like: