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)});
否则不行
然而,通常对数组使用智能指针并不是一个好的设计,尤其是 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]
" 使用带参数的构造函数。
答案是:不能。
我有一个名为 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)});
否则不行
然而,通常对数组使用智能指针并不是一个好的设计,尤其是 unique_ptr
,其中一个简单的 vector
(或 array
,或 string
)会最后做同样的工作。
引用 Scott Meyers 的话:
The existence of
std::unique_ptr
for arrays should be of only intellectual interest to you, becausestd::array
,std::vector
, andstd::string
are virtually always better data structure choices than raw arrays.
其实这道题与智能指针无关,相当于
"how to initialize the new Widget[number_of_widgets]
" 使用带参数的构造函数。
答案是:不能。