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

cgr*_*y14 3 c++ methods operator-overloading operators c++11

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

T* Get() {
    return &t;
}
Run Code Online (Sandbox Code Playgroud)

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

someSharedPtr.Get()SomeMethod()
Run Code Online (Sandbox Code Playgroud)

这基本上是什么

someSharedPtr->SomeMethod()
Run Code Online (Sandbox Code Playgroud)

正在做...我很困惑.如何返回指针替代类似->->operator->()->语法的东西?

Jon*_*ely 13

如何返回指针替代类似->->operator->()->语法的东西?

因为标准是这样说的.

13.5.6 [over.ref]定义了一个重载operator->到Do The Right Thing:

表达式x->m被解释为类型为if (x.operator->())->m的类对象x,T如果T::operator->()操作符被重载决策机制选为最佳匹配函数(13.3).

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

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