|
|
智能指针一定要重载重载-> 或* 操作符,我看到一个这样的实现,但是不是很理解。如下:
inline T& operator*() const { assert(ptr); return *ptr; }
inline T* operator->() const { assert(ptr); return ptr; }
上面ptr是真正的指针,假设我这样使用
smart_ptr<person> jack(new person);//person是一个类
jack->getname();//这个调用其实是我想得到人的名字。
我不理解的地方是这句jack->getname();按照我对重载的理解,jack->被重载后应该返回ptr,所以上面那句等同与ptrgetname();但是这样的组合没有任何意义啊,谁能告诉我究竟是我哪里理解错了,或者是编译器会对这样的组合做特殊处理还是这么样?
jack->getname()调用的目的应该是让他调用ptr->getname();但是上面的实现方式我实在搞不懂,一直都没理解,后来也没管就这这样用了,今天突然又碰到,所以想问个究竟。 |
|