std::make_unique 和指定的初始化器

问题描述 投票:0回答:1

考虑这个结构:

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"});
c++ smart-pointers designated-initializer
1个回答
3
投票

是否可以使用指定初始化器创建

std::unique_ptr

。不幸的是,您甚至无法使用 CTAD 来避免冗余:

auto my_struct = std::unique_ptr(new MyStruct{.my_number = 4, .my_string = "two"});

因为担心参数是

new MyStruct[…]
(具有相同的类型)。

© www.soinside.com 2019 - 2024. All rights reserved.