C ++引用返回

时间:2016-09-20 08:19:23

标签: c++

在这个例子中

class Object {
  Object(int val);
}


std::map<unsigned, Object> myMap;
Class Foo {

    Object &getObject (unsigned Id, int val) {

    auto pair = myMap.emplace(std::piecewise_construct, std::forward_as_tuple(Id), std::forward_as_tuple(val));
    if (pair.second) {
      // do something
    }
    else {
      // do another
    }
    return pair.first->second;
  }

}

是对中返回的引用(销毁的大小函数)是否保持有效?

2 个答案:

答案 0 :(得分:0)

是的,它仍然有效。

emplace返回std::pair,其中first是插入元素的迭代器,secondbool,表明安腾是否成功。

如果您确定secondtrue,则first中的迭代器指向地图内的元素,因此获取该对象的引用将起作用。

当然,请确保myMapgetObject()次电话更长。

答案 1 :(得分:0)

只要myMap的范围是全局的,引用将始终有效,即它不会指向垃圾,而是指向标准映射中的实际元素。