【发布时间】:2018-05-08 18:37:41
【问题描述】:
我有一个 unordered_map 的 unique_ptr 元素。当我想访问元素时,我必须移动它们并在使用完它们后将它们插入回去。
std::unordered_map<std::string,std::unique_ptr<MyClass>>
auto myClass = std::move(Program::cache["my_class"]);
// do something with myClass...
Program::cache["my_class"] = std::move(myClass);
这似乎很昂贵,所以我想使用参考
MyClass const& myClass = *Program::cache["my_class"];
or
auto myClass = *Program::cach["my_class"];
但这似乎不自然。这是容器和 unique_ptr 的常见用法吗?如果不是最好的做法是什么?
【问题讨论】:
-
引用有什么问题??请注意,您可以引用
unique_ptr本身:auto& ptr = Program::cache["my_class"]; -
我认为没有人会考虑将
std::unique_ptr移动到昂贵的位置。考虑将const auto &引用到您的std::unique_ptr。它不允许您重新分配指针,但仍然允许您对元素进行可变访问。 -
为什么不只是
MyClass *ptr = Program::cache["my_class"].get();? -
为什么要在地图中存储
unique_ptrs,而不是MyClass实例本身?
标签: c++ c++11 std unique-ptr