考虑这个结构:
struct MyStruct
{
int my_number;
std::string my_string;
};
是否可以使用
指定的初始化器创建
std::unique_ptr
?像这样:
// like this
auto my_struct = std::make_unique<MyStruct>{.my_number = 4, .my_string = "two"};
// not like this
auto my_struct = std::make_unique<MyStruct>(4, "two");
我成功创建了一个新对象作为
unique_ptr
的参数,但发现它很难看:
auto my_struct = std::unique_ptr<MyStruct>(new MyStruct{.my_number = 4, .my_string = "two"});
是否可以使用指定初始化器创建
?std::unique_ptr
不。不幸的是,您甚至无法使用 CTAD 来避免冗余:
auto my_struct = std::unique_ptr(new MyStruct{.my_number = 4, .my_string = "two"});
因为担心参数是
new MyStruct[…]
(具有相同的类型)。