Suppose that a function normally allocates memory for an object, uses it, and then deallocates the memory. But if the function exits before reaching the end, either because of a return statement or an exception, it must still not exit without deallocating the memory:
void foo(int n)
{
my_class* ptr = new my_class;
try {
ptr->process(n); // may throw exception
} catch (...) {
delete ptr;
throw;
}
delete ptr;
}
The C++ standard libary provides an automatic pointer type,
auto_ptr, which you can use by including
<memory>. An
auto_ptr is constructed using a pointer. You can then use and dereference
auto_ptr as if it were a pointer. When an
auto_ptr goes out of scope, the destructor frees the memory automatically. The example above may thus be simplified to:
#include <memory>
void foo(int n)
{
std::auto_ptr<my_class> ptr(new my_class);
ptr->process(n);
}