据我所知,foo->bar()
与(*foo).bar()
相同,除非箭头以奇怪的方式过载,通常不应该这样做。 This answer似乎同意。
然而,对于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,ref:(48.68674,8.99122),nref:(48.68682,8.99368)
Link2:1076570435, ref:(48.68674,8.99122),nref:(48.68682,8.99368)
新链接:1076570435,参考:(48.68669,8.98889),参考:(48.68674,8.99122)
(我的亮点)
答案 0 :(得分:0)
事实证明,问题不在于(* a)和a-&gt;之间的差异,而是在同一个cout中将它们链接在一起。执行cout << a->func() << b->func();
会产生与cout << a->func(); cout <<b->func();
不同的结果。
我会为此开一个新问题。