C++ 11 unique_ptr数组和构造函数参数

Luc*_*uca 4 stl smart-pointers c++11

我有一个名为Widget的C++类,我可以使用C++ 11智能指针数组工具来创建它们的动态数组,如下所示:

std::unique_ptr<Widget[]> widget(new Widget[number_of_widgets]);
Run Code Online (Sandbox Code Playgroud)

现在,我更改了对象,以便构造函数现在接受两个整数参数.是否仍然可以使用智能指针数组并调用参数化构造函数?

Hiu*_*ura 5

您可以但只有在编译时才知道要构建的元素的确切数量:

const std::size_t number_of_widgets = 2;
std::unique_ptr<Widget[]> widget(new Widget[number_of_widgets]{Widget(1, 2), Widget(3, 4)});
Run Code Online (Sandbox Code Playgroud)

现场演示

否则你不能.

但是,通常使用智能指针进行数组设计并不是一个好的设计,尤其是unique_ptr在简单vector(array或者string)最终会完成相同工作的地方.

引用Scott Meyers:

的存在std::unique_ptr对数组应该只有智慧感兴趣的是你的,因为std::array,std::vectorstd::string几乎总是更好的数据结构的选择,要比原阵列.