操作员>瞬变性和shared_ptr
Operator-> transistency and shared_ptr
我记得在某处读过,但不记得在哪里,操作符->是暂态的。它会用operator->查找对象,直到找到不是指针的东西,然后运行一个普通的操作符。在那。然而,我遇到了一个问题,
考虑以下代码:
#include <boost/shared_ptr.hpp>
#include <vector>
#include <iostream>
struct Foo {
Foo(int val) : i(val) {}
typedef boost::shared_ptr<Foo> ptr;
int i;
};
int main(int argc, char** argv) {
typedef std::vector<Foo::ptr> FooVec;
FooVec v;
for(FooVec::iterator it = v.begin(); it != v.end(); ++it) {
std::cout <<it->i <<std::endl;
}
return 0;
}
我得到这个错误:
ptr.cpp: In function ‘int main(int, char**)’:
ptr.cpp:15:19: error: ‘class boost::shared_ptr<Foo>’ has no member named ‘i’
std::cout <<it->i <<std::endl;
因为boost::shared_ptr不是指针。我可以用
来解决这个问题std::cout <<(*it)->i <<std::endl
但我认为这看起来更糟,我试过std::shared_ptr,但也有同样的问题。是否有一个很好的方法来解决这个问题,或者我被困在(*it)->i
?
我记得在某个地方读过,但不记得在哪里了,那个运算符->是短暂的。
在c++中没有。正如您已经发现的那样,您需要双重取消引用。
相关文章:
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++中的指针否定 (!ptr == NULL)
- 从const ptr*转换为ptr*时出现问题
- 无法使用 libtool 将 -shared 参数传递给 g++
- boost::shared_ptr和std::shared-ptr的同居
- 我可以用std::shared_ptr而不是boost::shared-ptr构建boost库吗
- shared-ptr-C++shared_ptr与unique_ptr用于资源管理