如何填充unique_ptr数组?

时间:2016-12-28 15:55:37

标签: c++ arrays c++11 c++14 unique-ptr

是否可以使用pdf填充std:fill的数组?目的是为不同的对象提供不同的指针,这些对象使用相同的参数进行初始化。

例如:

unique_ptr

3 个答案:

答案 0 :(得分:20)

不,但这是std::generate的用途。

不是给出在整个目标范围内复制的单个值,而是std::generate被赋予"生成器"根据需要创建每个值的函数。

所以,可能是这样的:

std::unique_ptr<int> ar[3];
std::generate(
   std::begin(ar),
   std::end(ar),
   []() { return std::make_unique<int>(1); }
);

我还没有尝试过,并且根本不知道你是否需要摆弄它以避免因不可复制而产生的问题。希望移动语义就足够了。

(当然,在C ++ 11中,您需要your own make_unique function。)

顺便说一下,你的.begin().end()错了(数组没有成员函数),所以(感谢来自songyuanyao的提醒)我已经纠正了这些。

答案 1 :(得分:8)

我认为你不能用std::fill()来做,但与std::generate()一起做是微不足道的:

std::unique_ptr<int> array[10];
std::generate(std::begin(array), std::end(array),
              []{ return std::unique_ptr<int>(new int(17)); });

答案 2 :(得分:0)

另一种解决方案:

std::unique_ptr<int> ar[3];

size_t i;
for (i = 0; i < elementsof(ar); ++i) {
    ar[i].reset(new int);
}