The Arrow Operator
Overloading arrow operator is useful in creating objects that have a ‘pointer-like’ behavior.
The arrow operator can be defined only as a member function, and the return type must either be a pointer to a class type or an object for which the member access arrow is itself defined.
A smart pointer is an object that can be used in the manner of a pointer.