gpt4 book ai didi

c++ - 如何构造具有唯一指针的 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:50 24 4
gpt4 key购买 nike

我尝试用 unique_ptr 构造一个 vector 。但是我没有找到直接的方法。以下代码无法编译。错误是:调用“std::__1::unique_ptr >”的隐式删除的复制构造函数:

#include <iostream>
#include <memory>
#include <utility>
#include <vector>
class test1{
public:
test1(){};
test1(test1&&)=default;
};

int main(int argc, const char * argv[]) {
std::unique_ptr<test1> us(new test1());
std::vector<std::unique_ptr<test1>> vec{move(us)};
return 0;
}

最佳答案

您正在调用 vector constructor (链接页面上的(7))需要initializer_list<T>争论。一个initializer_list only allows const access到它的元素,所以vector必须复制元素,这当然无法编译。

以下应该有效

std::unique_ptr<test1> us(new test1());
std::vector<std::unique_ptr<test1>> vec;

vec.push_back(move(us));
// or
vec.push_back(std::unique_ptr<test1>(new test1()));
// or
vec.push_back(std::make_unique<test1>()); // make_unique requires C++14

您可以使用 vector采用两个迭代器的构造函数,但解决方案仍然不是单行的,因为它需要您定义一个临时数组,然后您可以从中移动。

std::unique_ptr<test1> arr[] = {std::make_unique<test1>()};
std::vector<std::unique_ptr<test1>> vec{std::make_move_iterator(std::begin(arr)),
std::make_move_iterator(std::end(arr))};

关于c++ - 如何构造具有唯一指针的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972563/

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