c++ - 无法将空的初始值设定项分配给 unique_ptrs 的 vector

标签 c++ c++11 vector unique-ptr unordered-map

我有以下代码:

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>>();
}

谁能解释为什么会这样?我认为空的初始化列表会导致一个空 vector 被分配给 triggers[eventName] .

最佳答案

triggers[eventName] = {}解析为 vector<T>::operator=(std::initializer_list<T>) .此运算符需要将元素从初始值设定项列表复制到 vector 。
triggers[eventName] = std::vector<...>()解析为 vector<T>::operator=(vector<T>&&) - 移动赋值运算符。这不需要复制任何元素,只需转移现有存储的所有权。

关于c++ - 无法将空的初始值设定项分配给 unique_ptrs 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62124666/

相关文章:

linux - 为什么使用 std::thread::hardware_concurrency() 和 boost::thread::hardware_concurrency() 有区别?

c++ - 存储在对象 vector 上的基于堆栈的指针具有长期的生命周期?

c++ - 从 C++ 中的两个相关 vector 进行随机选择的最快方法是什么?

c++ - 使用 if else 将数字转换为单词

c++ - 如何在 cvCvColor 之后获取对 YUV 组件的引用?

c++ - 仅更改一个元素时如何在排序列表中进行快速排序

c++ - 使用指向内联函数的指针与使用指向函数的指针

Qt Creator 2.7.0 (Qt 5.0.2) 中的 C++11 线程支持

c++ - 可变参数模板、类型推导和 std::function

c++ - 为什么 std::sort() 比 std::make_heap() 快?