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 - >()是一元后缀运算符的意义.
对于第一点,我不明白为什么我们需要这种设计,或者在哪种情况下应该使用这种设计.对于第二点,我对作者想要提供的信息感到困惑.
谢谢.
在实现行为类似(伪装成)指针的对象时,此运算符会过载.
一个很好的例子是boost::shared_ptr,它是一个经典的引用计数指针,当所有指针都被销毁时它会自动删除指向的对象.由于种种原因,人们已经实施了无数其他类似的"智能指针"对象.
(并且,正如所指出的那样,stl迭代器也使用它来表现得像指针,允许语法像it->method();或it->data;)