【发布时间】:2019-11-07 14:54:45
【问题描述】:
我有一个std::vector<std::unique_ptr<MyClass>>,我将其分配给第二个相同类型的向量。
我收到此编译器错误:
/opt/gcc-8.2.0/include/c++/8.2.0/bits/stl_algobase.h:324:18: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = MyClass; _Dp = std::default_delete<MyClass>]'
*__result = *__first;
这是因为为了进行赋值,我需要为MyClass 定义一个移动赋值运算符吗?该类仅包含几个 unordered_maps、一个集合和几个原语。没有指针成员。
【问题讨论】:
-
在
std::vector级别使用std::move()代替。std::unique_ptr没有std::vector的赋值运算符所要求的复制构造函数。 -
@πάνταῥεῖ 谢谢!如果您将此作为答案,我会接受。
标签: c++ c++11 move move-semantics unique-ptr