1

没有给定一个私有成员 pData

private:
    T*    pData; // Generic pointer to be stored

下面是 * 和 -> 的重载实现

T& operator* ()
{
    return *pData;
}

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

我们从 main 中调用相同的方法,如下所示:

void main(){
    SP<PERSON> p(new Person("Scott", 25));
    p->Display();
}

我无法理解 -> 和“*”运算符重载将如何在这里工作?或者更清楚p->Display(); 将如何解释?

4

1 回答 1

2

->运营商很特别。当它返回一个对象时,它会自动再次应用。如果它返回另一个对象,它也会再次应用,直到最终返回一个普通指针。这称为链接,普通指针最终被取消引用并且链接停止。

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 applied
于 2013-09-12T17:06:39.520 回答