我不明白 - >运算符用于std :: shared_ptr

时间:2014-01-28 16:21:38

标签: c++ c++11 methods operators operator-overloading

我似乎无法绕过它。 ->的{​​{1}}运算符只返回指向成员的指针(假设它是一个类的实例),但同时它可以用来调用方法......怎么样?我们没有对std::shared_ptr运算符返回的指针做任何事情。我们如何调用方法和访问实例变量?如果我有一些功能相同的东西,比如

->
T* Get() { return &t; } 中的

(是的,我确实知道有std::shared_ptr方法),为什么我不能写:

get()

基本上就是

someSharedPtr.Get()SomeMethod()

正在做......我很困惑。如何返回指针代替someSharedPtr->SomeMethod() ->->语法?

1 个答案:

答案 0 :(得分:13)

  

如何返回指针代替->->operator->()->语法?

因为标准是这样说的。

13.5.6 [over.ref]定义了一个重载的operator->去做正确的事情:

  

如果x->m存在并且运算符被选为最佳运算符,则表达式(x.operator->())->m将被解释为xT类对象T::operator->()通过重载解析机制匹配函数(13.3)。

如果没有这样做,那么你就无法实现类似于指针的类型,并且具有用户期望的类似指针类型的x->m通常的语义。因此,语言说它就是它所做的,做其他任何事情都会使重载operator->变得不那么有用。

这实际上允许你将operator->的调用链接到任意深度,如果你有类似指针的类型,返回类似指针的类型,返回类似指针的类型等,直到最终返回一个真实的指针。