【发布时间】: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::vector,cell 是类型
std::unique_ptr<AbstractType>&& cell
(我实际上将cell 传递给处理程序类)
我知道无法实例化抽象类型,并且我理解 std:move 运算符需要以某种方式实例化对象?
谁能帮我解决这个问题?还是该函数(不是我的项目的一部分)不应该返回指向抽象类型对象的唯一指针?
【问题讨论】:
-
我们在谈论
vector<AbstractType>吗?那是行不通的。改为存储vector<unique_ptr<AbstractType>>。 -
你是对的!我瞎了,我把它改成
vector<unique_ptr<AbstractType>>现在它可以工作了 -
@R.MartinhoFernandes:对您的评论 +1(这应该是一个答案)。你必须读心术!
-
为什么
cell是一个右值引用?这听起来不对。我们可以看到更多代码吗?
标签: c++ c++11 abstract-class stdvector