A: The simplest instance of a smart pointer is auto_ptr that is included in the standard C++ library. Auto Pointer only takes care of Memory leak & does nothing regarding dangling pointers issue. You can determine it in the header . Here is part of auto_ptr's implementation, to illustrate what it does:
template class auto_ptr
{
T* ptr;
public:
explicit auto_ptr(T* p = 0) : ptr(p) {}
~auto_ptr() {delete ptr;}
T& operator*() {return *ptr;} T* operator->() {return ptr;}
// ...
};
As you can illustrate, auto_ptr is a simple wrapper around a regular pointer. It forwards all significant operations to this pointer (dereferencing & indirection). Its elegance within the destructor: the destructor takes care of deleting the pointer.
For the user of auto_ptr, it means that rather then writing:
void foo()
{
MyClass* p(new MyClass);
p->DoSomething();
delete p;
}
You can write down following:
void foo()
{
auto_ptr p(new MyClass);
p->DoSomething();
}
And trust p to clean up after itself.