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

时间:2015-04-12 08:55:01

标签: c++11 stl smart-pointers

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

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

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

2 个答案:

答案 0 :(得分: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)});

Live demo

否则你不能。

但是,通常对阵列使用智能指针并不是一个好的设计,尤其是unique_ptr,其中一个简单的vector(或arraystring)会执行最后同样的工作。

引用Scott Meyers:

  

数组std::unique_ptr的存在应该只是您的学术兴趣,因为std::arraystd::vectorstd::string实际上总是比原始数据结构选择更好阵列。

答案 1 :(得分:2)

实际上这个问题与智能指针无关,它相当于
“如何使用带参数的构造函数初始化new Widget[number_of_widgets]

答案是:你做不到。