我试图实现类似于标准库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()?
答案 0 :(得分:4)
因为运算符->
按顺序应用,直到无法再应用它为止。
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*