在这个例子中
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;
}
}
是对中返回的引用(销毁的大小函数)是否保持有效?
答案 0 :(得分:0)
是的,它仍然有效。
emplace
返回std::pair
,其中first
是插入元素的迭代器,second
是bool
,表明安腾是否成功。
如果您确定second
是true
,则first
中的迭代器指向地图内的元素,因此获取该对象的引用将起作用。
当然,请确保myMap
比getObject()
次电话更长。
答案 1 :(得分:0)
只要myMap的范围是全局的,引用将始终有效,即它不会指向垃圾,而是指向标准映射中的实际元素。