我有称为窗口小部件C++类和我可以使用C++ 11智能指针阵列设施,以创建他们的动态数组如下:C++ 11的unique_ptr阵列和构造参数
std::unique_ptr<Widget[]> widget(new Widget[number_of_widgets]);
现在,我已经改变了这个对象,所以构造函数现在需要两个整型参数。是否仍然可以使用智能指针数组并调用参数化构造函数?
我有称为窗口小部件C++类和我可以使用C++ 11智能指针阵列设施,以创建他们的动态数组如下:C++ 11的unique_ptr阵列和构造参数
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::array
,std::vector
和std::string
几乎总是更好的数据结构的选择,要比原阵列。
其实这个问题是独立的智能指针,它使用一个带参数的构造函数达
“如何初始化new Widget[number_of_widgets]
”。
答案是:你不能。
谢谢你。我想我可以使用类似初始化列表的想法使用std :: array。 – Luca
来自Scott Meyers的好消息。然而有时候我喜欢用智能指针来使用原始数组(我不知道为什么!)。 – deepmax
This [break on clang](http://coliru.stacked-crooked.com/a/9adda0f3719c068f)。 OTOH,https://llvm.org/bugs/show_bug.cgi?id=22924 –