0

所以我对 C++ 比较陌生,我对以下 std::vector::const_iterator 有疑问:

for (vector<shared_ptr<FSNode>>::const_iterator itr = curNode->GetSubNodes().begin() ; itr != curNode->GetSubNodes().end(); itr++)
{
    shared_ptr<FSNode> nextNode = *itr;
    GetXMLFromNode(nextNode, xmlDom, dirEle);
}

GetSubNodes 访问器

const std::vector<shared_ptr<FSNode>> FSNode::GetSubNodes()
{
    return subNodes_;
}

基本上得到一个运行时错误,其中 itr 应该是一个常规的迭代器。有人知道我哪里出错了吗?可能是一个非常简单的问题,但我现在没有看到它。

4

1 回答 1

4

GetSubNodes正在按值返回一个向量。因此,每次调用向量时都会得到不同的向量副本。当副本被销毁时,您从此副本中获取的迭代器无效,这发生在语句的末尾。而是通过引用返回向量。

const std::vector<shared_ptr<FSNode>> & FSNode::GetSubNodes()
///////////////////////////////////// ^
{
    return subNodes_;
}
于 2013-06-12T22:56:59.987 回答