我似乎无法理解它。 std::shared_ptr
的 ->
运算符,只返回指向成员的指针(假设它是一个类的实例),但同时它可以用于调用方法...如何?我们没有对 ->
运算符返回的指针做任何事情。我们如何调用方法和访问实例变量?如果我有一些功能相同的东西,比如
T* Get() {
return &t;
}
在 std::shared_ptr
中(是的,我确实意识到有一个 get()
方法),为什么我不能写:
someSharedPtr.Get()SomeMethod()
本质上就是这样
someSharedPtr->SomeMethod()
正在做...我很困惑。返回指针如何替代 ->->
或 operator->()->
语法?
最佳答案
How can returning a pointer substitute for something like
->->
oroperator->()->
syntax?
因为标准是这么说的。
13.5.6 [over.ref] 定义了一个重载的 operator->
来做正确的事:
An expression
x->m
is interpreted as(x.operator->())->m
for a class objectx
of typeT
ifT::operator->()
exists and if the operator is selected as the best match function by the overload resolution mechanism (13.3).
如果它没有这样做,那么您就无法实现像指针一样的类型,也无法实现用户期望的 x->m
的常用语义类似指针的类型。所以该语言说这就是它的作用,做任何其他事情都会使重载 operator->
的用处大大降低。
这实际上允许您将对 operator->
的调用链接到任意深度,如果您有一个返回类指针类型的类指针类型等,直到最后 something 返回一个真正的指针。
关于c++ - 我不明白 std::shared_ptr 的 -> 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21411098/