Login | Register   
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Home » Tip Bank » C++
Language: C++
Expertise: Intermediate
Oct 24, 2006

Using auto_ptr

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);
}
Kevin Spiteri
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap