gpt4 book ai didi

c++ - 将 unique_ptr 的 vector 插入另一个 vector

转载 作者:IT老高 更新时间:2023-10-28 23:09:50 25 4
gpt4 key购买 nike

我有一个 unique_ptr 的 vector ,我想将它们附加到另一个 unique_ptr vector 。我通常会做一个简单的插入:

std::vector<std::unique_ptr<foo>> bar;
bar.push_back(std::unique_ptr<foo>(new foo(1)));
std::vector<std::unique_ptr<foo>> baz;
baz.push_back(std::unique_ptr<foo>(new foo(2)));
bar.insert(bar.end(), baz.begin(), baz.end());

但是这给了我类似这样的编译错误:

/usr/include/c++/4.8/bits/stl_algobase.h:335: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = foo; _Dp = std::default_delete<foo>]'
*__result = *__first;
^

有没有一种方便的插入方式,还是我必须在 bar 上迭代 baz 和 push_back?我目前正在使用 gcc 4.8.1。

谢谢

最佳答案

unique_ptr 不能用普通赋值运算符赋值(错误说它已被删除)。你只能移动它们:

bar.insert(bar.end(),
std::make_move_iterator(baz.begin()),
std::make_move_iterator(baz.end())
);

当然,这会转移托管对象的所有权,原始指针将具有nullptr值。

关于c++ - 将 unique_ptr 的 vector 插入另一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21487714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com