c++引用返回

C++ reference return

本文关键字:返回 引用 c++      更新时间:2023-10-16

在这个例子中

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;
  }
}

对返回的引用(在函数大小之外销毁)是否仍然有效?

是有效的

emplace返回std::pair,其中first是指向插入元素的迭代器,second是表示插入是否成功的bool

如果你确定secondtrue,则first中的迭代器指向映射中的元素,因此对该对象进行引用将有效。

确保myMap比任何getObject()调用都要长寿。

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