将std :: vector <std :: unique_ptr <T >>分配给另一个std :: vector <std :: unique_ptr <T >>

use*_*112 2 c++ move unique-ptr move-semantics c++11

我有一个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;
Run Code Online (Sandbox Code Playgroud)

这是因为要进行分配,我需要为定义一个移动分配运算符MyClass?该类仅包含几个unordered_maps,一个集合和几个基元。没有指针成员。

Ser*_*eyA 8

您无法将std::unique_ptr元素向量复制-分配给另一个向量,因为您无法复制std::unique_ptr自身。它是独一无二的!

您定义的任何操作都不MyClass能改变这一事实。

不过,您可以从这样的向量移开-但这意味着原始向量将不再包含这些std::unique_ptr元素。

  • @ user997112您可以接受此答案。我不会去抱怨(也不会写另一个答案)。 (2认同)