noGiven私人成员pData
private:
T* pData; // Generic pointer to be stored下面是*和->的重载实现
T& operator* ()
{
return *pData;
}
T* operator-> ()
{
return pData;
}如下所示,从主要部分来看,我们也这样称呼:
void main(){
SP<PERSON> p(new Person("Scott", 25));
p->Display();
}我不明白->和"*“操作符重载在这里是如何工作的?或者更清楚地说,p->Display();将如何解释?
发布于 2013-09-12 17:06:39
->运算符是特殊的。当它返回一个对象时,它将自动再次应用。如果它返回另一个对象,它也会再次应用,直到最终返回一个普通指针。这就是所谓的链接,普通指针最终被取消引用,链停止。
因此,p->Display()被解释为:
p->Display(); // Compiler sees this
T* tmp = p.operator->(); // First applied operator-> (the one you provided)
tmp->Display(); // since T* is a pointer itself, operator-> (the built-in one for pointers) is appliedhttps://stackoverflow.com/questions/18765992
复制相似问题