【发布时间】:2016-05-18 15:56:27
【问题描述】:
我是来自 boost 的 shared_ptr 的新手,我正在考虑迭代我的集合以获得最佳对象。 编辑:添加有关 first_world 的信息
std::set<World::CPtr> first_world = ... // long call, but it gets a set of constant shared pointers to the class World, where various methods exist
typedef boost::shared_ptr<World const> CPtr;
World::CPtr best = *(first_world.begin());
for (World::CPtr lo : first_world) {
if (best->getValue() >= lo->getValue() ){
best = lo;
}
}
稍后我想使用该共享指针,我的程序崩溃并与断言 `px != 0' 失败通信。我遵循了here 的规则,我的意思是我在循环中使用了一个共享指针作为迭代器,然后我将它分配给了另一个指针。这是不好的做法,有更好的做法吗?
cout << "name is: " << best->getDefinition() << endl;
【问题讨论】:
-
你为什么使用
boost::shared_ptr,而你显然在使用 C++11? -
@molbdnilo 为什么不呢?似乎相当无关紧要。上次我检查的类型不一样,使用你的代码库需要的类型是有意义的......
-
好吧,c++11 不是必需的,我会将其更改为旧标准 - 我想了解的是为什么它不起作用,如何使它起作用。
-
可以分享
first_world的声明吗?它是什么样的容器,元素类型是什么? -
@MarkWaterman 已更新。很抱歉遗漏了这些明显需要的信息。
标签: c++ pointers boost iterator shared-ptr