gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:45:39 25 4
gpt4 key购买 nike

我有一门课,叫做group ,它应该在里面保留一些基类,保存在std::unique_ptr中。 s(多态性)。顺序无关紧要,如果某些元素在它们之间相等也无关紧要。这是一个 std::vector 的任务, 我最好将其标记为 const在成员声明中。

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

class base;

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

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

但我遇到了以下问题:

  • group 中的 vector 类将由 std::unique_ptr 组成,不是对象。
  • 作为std::initializer_list s 只能保存一种类型的对象,该类型应为指向基类的指针。

考虑到所有这些,我应该如何实现它?作为 group 中的元素类的 vector 不应该改变,在构造函数的初始化列表中初始化它会更有效。然而,std::unique_ptr s 不可复制,我不知道如何构建 vectorunique_ptr<base_class>来自 initializer_list由原始指针组成。

最佳答案

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

#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) 问了一个相关但不同的问题

关于C++ - 通过初始化列表构造 unique_ptr 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17135627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com