C++ C++;-通过初始化列表构造唯一_ptr的向量

C++ C++;-通过初始化列表构造唯一_ptr的向量,c++,initialization,polymorphism,initializer-list,C++,Initialization,Polymorphism,Initializer List,我有一个名为group的类,它将在其中保存一些基类,保存在std::unique_ptrs(多态性)中。顺序并不重要,如果某些元素之间相等,顺序也不重要。这是一个std::vector的任务,理想情况下,我会在成员声明中将其标记为const 作为设计的一部分,我希望在初始值设定项列表中传递所有适合组对象的元素,如下所示: class base; class derived1 : base; class derived2 : base; class derived3 : base; group

我有一个名为
group
的类,它将在其中保存一些基类,保存在
std::unique_ptr
s(多态性)中。顺序并不重要,如果某些元素之间相等,顺序也不重要。这是一个
std::vector
的任务,理想情况下,我会在成员声明中将其标记为
const

作为设计的一部分,我希望在
初始值设定项列表
中传递所有适合
对象的元素,如下所示:

class base;

class derived1 : base;
class derived2 : base;
class derived3 : base;

group my_object({ new derived1() , new derived2() , new derived3() });
#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()) };

}
但我在以下方面遇到了问题:

  • 类中的向量将由
    std::unique_ptr
    对象组成
  • 由于
    std::initializer\u list
    s只能保存一种类型的对象,该类型应为指向基类的指针

考虑到所有这些,我应该如何实施它?由于
类”向量中包含的元素不应更改,因此在构造函数的初始化列表中对其进行初始化更为有效。然而,
std::unique_ptr
s是不可复制的,我不知道如何从由原始指针组成的
初始值设定项列表构建
unique_ptr
向量

class base;

class derived1 : base;
class derived2 : base;
class derived3 : base;

group my_object({ new derived1() , new derived2() , new derived3() });
#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()) };

}
#包括
类基{};
类derived1:公共基{};
类derived2:公共基{};;
类derived3:公共基{};;
使用名称空间std;
int main(){
自动ptr={unique_ptr(new derived1())、unique_ptr(new derived2())、unique_ptr(new derived3())};
}
但问题似乎是您无法从初始值设定项列表中移动,因为初始值设定项列表是常量。这里有更多关于这个的内容


我在

@jrok上问了一个相关但不同的问题对不起,这是一个输入错误。“在构造函数的初始化列表中初始化它要有效得多”——你确定吗?它真的比在向量上调用
reserve()
,然后为每个指针调用push\u back/emplace\u back更有效吗?源代码可能更美观,但我怀疑您是否会注意到效率上的差异。的可能重复,但在我的
类的构造函数中如何处理?如何告诉
向量
的构造函数获取
初始值设定项列表
中的对象并移动它们?初始值设定项列表是常量。他们就是搬不动。