如何填充unique_ptr数组?

Dan*_*nra 6 c++ arrays unique-ptr c++11 c++14

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

例如:

std::unique_ptr<int> ar[3];
std::fill(ar.begin(), ar.end(), make_unique_for_each_element_somehow<int>(1));
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 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); }
);
Run Code Online (Sandbox Code Playgroud)

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

(当然,在C++ 11中,您将需要自己的make_unique功能.)

顺便说一句,你.begin().end()是错误的(数组没有成员函数),所以(得益于songyuanyao提醒)我已经改正了这些.


Die*_*ühl 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)); });
Run Code Online (Sandbox Code Playgroud)