18

我想从向量返回对象的引用,并且该对象位于迭代器对象中。我怎样才能做到这一点?

我尝试了以下方法:

Customer& CustomerDB::getCustomerById (const string& id) {
    vector<Customer>::iterator i;
    for (i = customerList.begin(); i != customerList.end() && !(i->getId() == id); ++i);

    if (i != customerList.end())
        return *i; // is this correct?
    else
        return 0; // getting error here, cant return 0 as reference they say
}

代码中customerList是一个客户向量,getId函数返回客户的id。

*i正确的吗?我怎样才能返回 0 或 null 作为参考?

4

2 回答 2

25

return *i;是正确的,但是您不能返回 0 或任何其他此类值。如果在向量中找不到客户,请考虑抛出异常。

返回对向量中元素的引用时也要小心。如果 vector 需要重新分配其内存并移动内容,则在 vector 中插入新元素会使您的引用无效。

于 2012-05-11T10:58:33.310 回答
4

没有“空”引用之类的东西:如果您的方法获得不在向量中的 id,它将无法返回任何有意义的值。正如@reko_t 指出的那样,当向量重新分配其内部时,即使是有效的引用也可能变得无效。

当您始终可以返回对将在一段时间内保持有效的现有对象的引用时,您应该只使用引用返回类型。在您的情况下,两者都不能保证。

于 2012-05-11T11:01:08.710 回答