C ++重载 - >操作员,它是如何工作的?

时间:2012-10-04 09:19:03

标签: c++ operator-overloading

我试图实现类似于标准库auto_ptr的智能指针类,因此我不得不重载 - >同样的运营商。这是我的代码

template <typename T>
class SmartPtr
{

   T * operator -> ()
  {
    return _pAct;
  }

 private:
 T * _pAct;
};

未显示其余的实现,以避免从我的查询中转移。

现在我创建一个A类的SmartPtr并调用A中存在的方法Show():

SmartPtr smPtr(new A);
smPtr->Show();

这是我的查询(不知道它是否也有效)

由于SmartPtr :: operator-&gt;()返回A *,因此对show的调用应转换为(A *)Show。为什么它转换为(A *) - &gt; Show()?

或者换句话说smPtr-&gt; Show()是什么意思在任何smPtr-&gt;()运算符返回时调用Show()?

1 个答案:

答案 0 :(得分:4)

因为运算符->按顺序应用,直到无法再应用它为止。

13.5.6班级成员访问[over.ref]

  

1)operator->应为非静态成员函数,否则为   参数。它使用-> postfix-expression -> id-expression实现类成员访问解释表达式x->m   对于类型为(x.operator->())->m的类对象x,为T if   如果运营商被选为最佳运营商,则存在T::operator->()   通过重载解析机制匹配函数(13.3)。(强调我的)

在您的情况下,这意味着它转换为:

smPtr.operator->()->Show();
          |           |
      returns A*   call Show on the A*