为什么重载运算符 - >()有用?

use*_*983 2 c++ operator-overloading

我在C++编程语言一书中看到了以下示例

class Ptr {
     X* operator->( );
};

 voide f(Ptr p)
 {
   p->m=7;
   X* q1 = p->;
   X* q2 = p.operator->();
 }
Run Code Online (Sandbox Code Playgroud)

该书声称1)类Ptr的对象可以用于以与指针使用方式非常类似的方式访问类X的成员.2)将对象p转换为指针p.operator - >()不依赖于指向的成员m.这就是operator - >()是一元后缀运算符的意义.

对于第一点,我不明白为什么我们需要这种设计,或者在哪种情况下应该使用这种设计.对于第二点,我对作者想要提供的信息感到困惑.

谢谢.

Jam*_*mes 5

在实现行为类似(伪装成)指针的对象时,此运算符会过载.

一个很好的例子是boost::shared_ptr,它是一个经典的引用计数指针,当所有指针都被销毁时它会自动删除指向的对象.由于种种原因,人们已经实施了无数其他类似的"智能指针"对象.

(并且,正如所指出的那样,stl迭代器也使用它来表现得像指针,允许语法像it->method();it->data;)