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

C++11 unique_ptr array and constructor parameters

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

std::unique_ptr<Widget[]> widget(new Widget[number_of_widgets]);

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

您可以,但前提是您知道在编译时要构建的元素的确切数量:

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

Live demo

否则不行

然而,通常对数组使用智能指针并不是一个好的设计,尤其是 unique_ptr,其中一个简单的 vector(或 array,或 string)会最后做同样的工作。

引用 Scott Meyers 的话:

The existence of std::unique_ptr for arrays should be of only intellectual interest to you, because std::array, std::vector, and std::string are virtually always better data structure choices than raw arrays.

其实这道题与智能指针无关,相当于
"how to initialize the new Widget[number_of_widgets]" 使用带参数的构造函数。

答案是:不能。