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

时间:2017-07-19 08:40:05

标签: c++ pointers boost shared-ptr

据我所知,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)

(我的亮点)

1 个答案:

答案 0 :(得分:0)

事实证明,问题不在于(* a)和a-&gt;之间的差异,而是在同一个cout中将它们链接在一起。执行cout << a->func() << b->func();会产生与cout << a->func(); cout <<b->func();不同的结果。

我会为此开一个新问题。