template class SmartPtr { public: SmartPtr(T *realPtr = 0) { pointee = realPtr; } T *operator->() const { return pointee; } T &operator*() const { return *pointee; } private: T *pointee; };