DEV Community

Vaishakh Menon
Vaishakh Menon

Posted on

Why auto_ptr in c++ was removed.

auto_ptr was deprecated from gcc 4.7.1 and above or when compiled with --std=c++11 will start to give warning, and is completely removed from --std=c++17.

The main reason is, it moves from lvalue via copy/assignment operator.

For Eg:

#include <iostream>
#include <memory>

int main()
{
    auto printNull = [] (std::auto_ptr<int> &value, std::string name) 
    {
        (value.get() == nullptr) ? std::cout << name << " is nullptr\n" 
                        : std::cout << name << " is not nullptr, & contains " << *value << "\n";
    };

    std::auto_ptr<int> p_int(new int{5});
    printNull(p_int, "p_int");
    std::auto_ptr<int> p_new_int;
    p_new_int = p_int;  /*Moves instead of copy*/
    printNull(p_new_int, "p_new_int");
    printNull(p_int, "p_int");

    return 0;
}


****OUTPUT****

p_int is not nullptr, & contains 5
p_new_int is not nullptr, & contains 5
p_int is nullptr

Enter fullscreen mode Exit fullscreen mode

So it's definitely not a good thing, and it was not aligning itself with modern cpp ideologies.
In most cases auto_ptr can be directly swapped with std::unique_ptr<>, but in larger systems caution is advised before changing.

Even thought it is removed from c++17, I can still compile it in gcc 13.1 link this was kind of strange.

more info

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

While many AI coding tools operate as simple command-response systems, Qodo Gen 1.0 represents the next generation: autonomous, multi-step problem-solving agents that work alongside you.

Read full post →

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post