通过成员函数将唯一 ptr 的向量附加到另一个向量



我想将唯一 ptrs 的向量移动到我存储在类中的唯一 ptrs 向量。我在这里将其简化为最小示例:

#include <iostream>
#include <memory>
#include <vector>
using namespace std;
class A
{
public:
    A() = default;  
};

class B
{
public:
    void AddAs(const vector<unique_ptr<A>>& vv)
    {
        vec.insert(vec.end(),
            std::make_move_iterator(vv.begin()),
            std::make_move_iterator(vv.end())
        );
    }
    vector<unique_ptr<A>> vec;
};

int main() {    
    vector<unique_ptr<A>> v;
    for(int i=0; i<10; ++i)
    {
        v.push_back(make_unique<A>());
    }
    B b;
    b.AddAs(v);
    return 0;
}

https://ideone.com/76iNIM

这试图遵循将一个unique_ptr向量插入另一个向量的答案

但这不会像它所说的那样编译,因为它正在使用复制运算符。

我确信这是一个愚蠢的问题,但我是C++新手,我正在努力查看副本在哪里。

谢谢

您不能从通过常量引用传递的向量移动,因为移动需要修改。因此,将该方法更改为:

void AddAs(vector<unique_ptr<A>>&& vv)

按值传递也将起作用:

void AddAs(vector<unique_ptr<A>> vv)

请注意,您需要更改调用代码:

b.AddAs(std::move(v));

这实际上很好,因为向读者展示了矢量将被移动。

现场示例

相关内容

  • 没有找到相关文章

最新更新