Could you give me an exact definition of smart pointers, and how does a reference counting smart pointer work?
I don't believe there is an exact definition, since I think you'll find variations on its use. But the basic idea is to use encapsulation within a class to ensure that any data pointed to gets deleted. (A common error when using pointers occurs when you forget to delete the memory a pointer pointed to.)
To implement such a class, the constructor will probably initialize a pointer member to zero. Then, the destructor and any methods that change the value of the pointer can verify the pointer is zero and release the memory if it is not.