使用初始化列表,其中值包含 unique_ptr 个成员变量
using an initializer list where the values contain unique_ptr member variables
我有一个 class,其中包含一个 unique_ptr。我想将这个 class 的实例放在一个容器中(特别是 std::map)。这可以使用 std::move
和 .emplace
但是,我想在容器的初始化列表中执行所有这些初始化。这可能吗?
我怀疑 Foo
在初始化程序列表中被初始化然后被复制,这是导致问题的原因。我试过在初始化列表中添加一个 std::move
但这并没有解决问题。
class Foo
{
public:
std::unique_ptr<std::string> my_str_ptrs;
}
编译失败“试图访问已删除的函数”。 这是我想做的事的例子
std::map<std::string, Foo> my_map{
{"a", Foo{}}
};
编译成功
std::map<std::string, Foo> my_map;
my_map.emplace("a", Foo{});
我有一个 class,其中包含一个 unique_ptr。我想将这个 class 的实例放在一个容器中(特别是 std::map)。这可以使用 std::move
和 .emplace
但是,我想在容器的初始化列表中执行所有这些初始化。这可能吗?
我怀疑 Foo
在初始化程序列表中被初始化然后被复制,这是导致问题的原因。我试过在初始化列表中添加一个 std::move
但这并没有解决问题。
class Foo
{
public:
std::unique_ptr<std::string> my_str_ptrs;
}
编译失败“试图访问已删除的函数”。 这是我想做的事的例子
std::map<std::string, Foo> my_map{
{"a", Foo{}}
};
编译成功
std::map<std::string, Foo> my_map;
my_map.emplace("a", Foo{});