c++c++11smart-pointersauto-ptrunique-ptr

std::auto_ptr to std::unique_ptr


With the new standard coming (and parts already available in some compilers), the new type std::unique_ptr is supposed to be a replacement for std::auto_ptr.

Does their usage exactly overlap (so I can do a global find/replace on my code (not that I would do this, but if I did)) or should I be aware of some differences that are not apparent from reading the documentation?

Also if it is a direct replacement, why give it a new name rather than just improve the std::auto_ptr?


Solution

  • You cannot do a global find/replace because you can copy an auto_ptr (with known consequences), but a unique_ptr can only be moved. Anything that looks like

    std::auto_ptr<int> p(new int);
    std::auto_ptr<int> p2 = p; 
    

    will have to become at least like this

    std::unique_ptr<int> p(new int);
    std::unique_ptr<int> p2 = std::move(p);
    

    As for other differences, unique_ptr can handle arrays correctly (it will call delete[], while auto_ptr will attempt to call delete.