【发布时间】:2020-09-19 07:23:24
【问题描述】:
我有以下代码:
std::unordered_map<std::string, std::vector<std::unique_ptr<class EventTrigger>>> triggers;
if (triggers.end() == triggers.find(eventName)) {
triggers[eventName] = {};
}
这会导致有关使用已删除的 unique_ptr 构造函数的错误。另一方面,如果我这样做,一切都编译得很好:
if (triggers.end() == triggers.find(eventName)) {
triggers[eventName] = std::vector<std::unique_ptr<class EventTrigger>>();
}
谁能解释为什么会这样?我认为空的初始化列表会导致一个空向量被分配给triggers[eventName]。
【问题讨论】:
-
顺便说一下,如果你的目标是添加具有默认值的键,你可以写
triggers[eventName];。您无需先检查find-operator[]会同时执行查找和“如果不存在则插入默认值”部分。 -
不过,请在其后添加评论,否则有人会认为这是一个意外。
标签: c++ c++11 vector unique-ptr unordered-map