Shared_ptr间接:(*a).b 和 a->b 之间的区别?
Shared_ptr indirection: Difference between (*a).b and a->b?
据我所知,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();
不同的结果。
我将为此提出一个新问题。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 构造函数和转换运算符之间的重载解析
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数