【问题标题】:How to store a vector of objects of an abstract class which are given by std::unique_ptr?如何存储由 std::unique_ptr 给出的抽象类对象的向量?
【发布时间】:2012-08-25 14:16:26
【问题描述】:

我有一个循环,其中我使用一个函数将 std::unique_ptr 返回到抽象类的对象。我想通过 push_back 将这些对象存储到 std::vector 中。但由于对象是抽象类型的,我得到以下错误:

error: cannot allocate an object of abstract type

换行

  cells.push_back(std::move(*cell));

其中单元格是抽象类型的std::vectorcell 是类型

std::unique_ptr<AbstractType>&& cell

(我实际上将cell 传递给处理程序类) 我知道无法实例化抽象类型,并且我理解 std:move 运算符需要以某种方式实例化对象?

谁能帮我解决这个问题?还是该函数(不是我的项目的一部分)不应该返回指向抽象类型对象的唯一指针?

【问题讨论】:

  • 我们在谈论vector&lt;AbstractType&gt;吗?那是行不通的。改为存储vector&lt;unique_ptr&lt;AbstractType&gt;&gt;
  • 你是对的!我瞎了,我把它改成vector&lt;unique_ptr&lt;AbstractType&gt;&gt; 现在它可以工作了
  • @R.MartinhoFernandes:对您的评论 +1(这应该是一个答案)。你必须读心术!
  • 为什么cell 是一个右值引用?这听起来不对。我们可以看到更多代码吗?

标签: c++ c++11 abstract-class stdvector


【解决方案1】:

您不能将AbstractType 元素直接存储在std::vector 上。您可以简单地将unique_ptrs 本身存储在std::vector&lt;std::unique_ptr&lt;AbstractType&gt;&gt;cells.push_back(std::move(cell)) 中。

【讨论】:

  • 原因是您正在调用复制构造函数,因此试图实例化一个抽象类。
猜你喜欢
  • 2018-09-17
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2019-12-27
相关资源
最近更新 更多