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



我有一个名为 Widget 的C++类,我可以使用 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)});

现场演示

否则你不能。

然而,通常对数组使用智能指针不是一个好的设计,特别是对于unique_ptr,一个简单的vector(或array,或string)最终可以完成相同的工作。

引用斯科特·迈耶斯的话:

数组std::unique_ptr的存在应该只是你对智力感兴趣,因为std::arraystd::vectorstd::string几乎总是比原始数组更好的数据结构选择。

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

答案是:你不能。

相关内容

  • 没有找到相关文章

最新更新