c++引用返回
C++ reference return
在这个例子中
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
。
如果你确定second
是true
,则first
中的迭代器指向映射中的元素,因此对该对象进行引用将有效。
确保myMap
比任何getObject()
调用都要长寿。
只要myMap的作用域是全局的,引用将始终有效,也就是说,它不会指向垃圾,而是指向标准映射中的实际元素。
相关文章:
- 寿命延长从函数返回引用
- 了解C++如何返回引用并绑定到引用
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 从类返回引用向量
- 使用unique_ptr并返回引用,或者我应该使用shared_ptr并在需要时制作副本
- 混淆C++从函数返回引用
- 两个相同的重载运算符[]一个返回引用
- 为什么向量的.at()成员函数返回引用而不是迭代器
- C++使用和返回引用
- 返回 T 引用的 Const 函子禁止赋值
- 返回引用是否也会延长其生存期?
- 如何返回引用,然后递增迭代器
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 我是否需要将 ref 与 make_pair 一起使用才能返回引用?
- 在 vector::at 返回引用后进行更改
- 为什么PyImport_ImportModule返回引用计数为 3 而不是 1 的 PyObject*
- 超出返回引用的单一实例生存期
- Boost.Python 返回引用现有 c++ 对象的 python 对象
- C++ 运算符 += 重载返回引用
- 如何声明接受转发引用并返回引用或副本的函数模板