Shared_ptr间接:(*a).b 和 a->b 之间的区别?

Shared_ptr indirection: Difference between (*a).b and a->b?

本文关键字:gt 之间 区别 Shared 间接 ptr      更新时间:2023-10-16

据我所知,foo->bar()(*foo).bar()相同,只是箭头以奇怪的方式过载时,通常不应该这样做。这个答案似乎很吻合。

然而,对于 boost::shared_ptrs,这似乎并非如此。以上是我的两行代码,在某些情况下会产生不同的结果:

(*new_link).getRefNode()  // returns some value
new_link->getRefNode()    // returns something different...

我在这里错过/不理解什么?

编辑:根据要求,cout 代码和打印的内容。我确保getRefNode((不会以任何方式修改实例 - 如果我更改调用的顺序,值会随着调用而变化,因此这与getRefNode((在内部所做的任何事情无关。

std::cout << "BLink1: " << (*previous_link).getId().toStdString()
<< ", ref: " << (*previous_link).getRefNode()
<< ", nref: " << (*previous_link).getNrefNode()
<< std::endl << "Link2: " << (*new_link).getId().toStdString()
<< ", ref: " << (*new_link).getRefNode()
<< ", nref: " << (*new_link).getNrefNode() << std::endl;
std::cout << "New link: " << new_link->getId().toStdString()
<< ", ref: " << new_link->getRefNode()
<< ", nref: " << new_link->getNrefNode() << std::endl;

BLink1: 1076889319, 参考: (48.68674, 8.99122(, nref: (48.68682, 8.99368(

链接 2: 1076570435, 参考: (48.68674,8.99122(, nref: (48.68682, 8.99368(

新链接: 1076570435, 参考: (48.68669, 8.98889(, nref: (48.68674, 8.99122(

(我的亮点(

事实证明,问题不在于 (*a( 和 a-> 之间的区别,而在于将它们链接在同一个 cout 中。做cout << a->func() << b->func();会产生与cout << a->func(); cout <<b->func();不同的结果。

我将为此提出一个新问题。