无法将空初始值设定项分配给 unique_ptrs 的向量
Can't assign empty initializer to vector of unique_ptrs
我有以下代码:
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] = {}
解析为 vector<T>::operator=(std::initializer_list<T>)
。此运算符需要将元素从初始化列表复制到向量。
triggers[eventName] = std::vector<...>()
解析为 vector<T>::operator=(vector<T>&&)
- 移动赋值运算符。这不需要复制任何元素,只需转移现有存储的所有权。
我有以下代码:
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] = {}
解析为 vector<T>::operator=(std::initializer_list<T>)
。此运算符需要将元素从初始化列表复制到向量。
triggers[eventName] = std::vector<...>()
解析为 vector<T>::operator=(vector<T>&&)
- 移动赋值运算符。这不需要复制任何元素,只需转移现有存储的所有权。