The auto_ptr<> class template respects polymorphism and destroys derived objects of base pointers properly. In the following program, an auto_ptr 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 destructor?the destructor of class B:
#include // for auto_ptrusing 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 pa(p); // bind auto_ptr to p }// B's destructor called here}