The auto_ptr<> class template respects polymorphism and destroys derived objects of base pointers properly. In the following program, an auto_ptr<A* > is actually bound to a B * pointer, where B is a class derived from A. Still, when auto_ptr's destructor executes, it calls the correct destructorthe destructor of class B:
#include <memory> // for auto_ptr
using namespace std;
struct A
{
virtual ~A() {}
};
struct B : public A
{
virtual ~B() {}
};
int main()
{
A * p;
{
p=new B; // pointer to base points to derived object
auto_ptr<A> pa(p); // bind auto_ptr to p
}// B's destructor called here
}