C++11 C++;11唯一的_ptr数组和构造函数参数 我有一个名为WIDGET的C++类,我可以使用C++ 11智能指针数组工具来创建它们的动态数组如下: std::unique_ptr<Widget[]> widget(new Widget[number_of_widgets]); std::unique_ptr小部件(新小部件[小部件的数量]);

C++11 C++;11唯一的_ptr数组和构造函数参数 我有一个名为WIDGET的C++类,我可以使用C++ 11智能指针数组工具来创建它们的动态数组如下: std::unique_ptr<Widget[]> widget(new Widget[number_of_widgets]); std::unique_ptr小部件(新小部件[小部件的数量]);,c++11,stl,smart-pointers,C++11,Stl,Smart Pointers,现在,我更改了对象,使构造函数现在接受两个整数参数。仍然可以使用智能指针数组并调用参数化构造函数吗?您可以,但前提是您知道在编译时生成的元素的确切数量: const std::size_t number_of_widgets = 2; std::unique_ptr<Widget[]> widget(new Widget[number_of_widgets]{Widget(1, 2), Widget(3, 4)}); const std::小部件的大小和数量=2; std::uni

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

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

const std::size_t number_of_widgets = 2;
std::unique_ptr<Widget[]> widget(new Widget[number_of_widgets]{Widget(1, 2), Widget(3, 4)});
const std::小部件的大小和数量=2;
std::unique_ptr小部件(新小部件[小部件的数量]{小部件(1,2),小部件(3,4)});

否则你不能

然而,通常对数组使用智能指针并不是一个好的设计,尤其是在
unique_ptr
中,简单的
向量
(或
数组
,或
字符串
)最终也会起到同样的作用

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

数组中是否存在
std::unique_ptr
对您来说应该只是一种智力上的兴趣,因为
std::array
std::vector
std::string
实际上总是比原始数组更好的数据结构选择


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


答案是:你不能。谢谢你。我想我可以用类似的初始化列表思想使用std::array。Scott Meyers的一段很好的引用。然而,有时我喜欢使用带有智能指针的原始数组(我不知道为什么!)。这是一个很好的例子。OTOH,我不同意Scott Meyers的观点,有时您需要直接控制阵列的生命周期。它发生在您需要从某个库(可以用C编写)发送或接收数组时。除此之外,我们更喜欢std::vector@Yankes,使用独特的ptr,一次只能有一个人拥有阵列,但使用
vector
也是如此。在这两种情况下,您都可以移动它。在这两种情况下,除了正常的对象寿命外,您还可以决定“杀死”它(
重置
清除
)。我是否遗漏了
unique_ptr
拥有但
vector
没有的东西?