如何用std::make_unique创建并初始化自定义值的std::unique_ptr<int[]>
用std::make_unique初始化自定义值的std::unique_ptr<int[]>
当然可以实现,但具体写法取决于你使用的C++标准版本:
C++14及更早版本
在C++14中,std::make_unique的数组重载仅支持指定数组大小来创建值初始化的数组(对于int类型来说就是初始化为0),并不支持直接传入自定义初始化列表。所以这时候你没法直接用std::make_unique完成你的需求,只能退回到你原本的写法:
std::unique_ptr<int[]> ptr{ new int[5]{1,2,3,4,5} };
或者如果坚持想用std::make_unique,可以先创建数组再手动赋值:
auto ptr = std::make_unique<int[]>(5); ptr[0] = 1; ptr[1] = 2; ptr[2] = 3; ptr[3] = 4; ptr[4] = 5;
C++20及之后版本
C++20扩展了std::make_unique的数组重载,支持通过初始化列表来直接初始化数组元素。这时候你就可以用更安全的std::make_unique来完成需求,写法非常简洁:
auto ptr = std::make_unique<int[]>({1,2,3,4,5});
这个写法会自动推导数组的大小(这里是5),并且把数组元素初始化为你指定的自定义值,同时避免了直接使用new的风险,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Killzone Kid
相关产品推荐
相关产品推荐

