通过初始化列表构造unique_ptr的vector对象

C++ - construct vector of unique_ptr via initialization list

本文关键字:ptr vector 对象 unique 初始化 列表      更新时间:2023-10-16

我有一个名为group的类,它将在其内部保留许多基类,以std::unique_ptr s(多态性)保存。顺序不重要,如果它们之间的某些元素相等也不重要。这是std::vector的任务,我希望在成员声明中标记为const

作为设计的一部分,我想在initializer_list中传递适合group对象的所有元素,如:

class base;
class derived1 : base;
class derived2 : base;
class derived3 : base;
group my_object({ new derived1() , new derived2() , new derived3() });

但是我有以下问题:

  • group类中的向量将由std::unique_ptr而不是对象组成。
  • 由于 CC_s只能保存一种类型的对象,该类型必须是指向基类的指针。

考虑到所有这些,我应该如何实现它?由于在group类的vector中保存的元素不应该改变,因此在构造函数的初始化列表中初始化它要有效得多。然而,std::unique_ptr s是不可复制的,我无法弄清楚如何从由原始指针组成的initializer_list构建unique_ptr<base_class>vector

你可以这样创建一个初始化列表:

#include<memory>
class base{};
class derived1 : public base{};
class derived2 : public base{};;
class derived3 : public base{};;
using namespace std;
int main (){
  auto ptrs={ unique_ptr<base>(new derived1()) , unique_ptr<base>(new derived2()) , unique_ptr<base>(new derived3()) };
}

但是问题似乎是你不能从初始化列表中移动,因为初始化列表是常量。这里有更多的信息。Initializer_list和move语义

我问了一个相关的但不同的问题在原地向量构造从初始化列表(类与构造函数参数)