C ++ - 通过初始化列表构造unique_ptr的向量

时间:2013-06-16 16:58:17

标签: c++ initialization polymorphism initializer-list

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

作为设计的一部分,我想传递适合groupinitializer_list对象的所有元素,如下所示:

class base;

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

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

但我遇到以下问题:

  • group课程内的向量将由std::unique_ptr对象组成。
  • 由于std::initializer_list只能容纳一种的对象,因此该类型应为指向基类的指针。

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

1 个答案:

答案 0 :(得分:2)

您可以制作如下的初始化列表:

#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 and move semantics

我在in-place vector construction from initialization list (for class with constructor arguments)

问了一个相关但又不同的问题