【发布时间】:2012-09-20 14:58:31
【问题描述】:
我有一个带有共享指针的向量:
std::vector<std::shared_ptr<DescriptorsNs::Descriptor> > mDescriptorList;
现在我想要一个 getter 函数,它返回一个包含这些对象副本的向量:
void CatUpdater::getDescriptorList(std::vector<Descriptor*>& descriptorList) const
{
descriptorList.clear();
for (auto it = mDescriptorList.begin(); it != mDescriptorList.end(); it++)
{
descriptorList.push_back(*it);
}
}
现在的问题是 Descriptor 是一个抽象类,当我尝试将它们添加到向量中时,它会正确声明:
/usr/include/c++/4.7/ext/new_allocator.h|110|error: cannot allocate an object of abstract type ‘DescriptorsNs::Descriptor’|
我可以通过为所有类型的派生类尝试std::dynamic_pointer_cast 来解决这个问题,但应该有更简单的方法来实现这一点。
谁能告诉我将原始对象复制到返回向量的更好方法?
【问题讨论】:
-
如果
Descriptor是抽象的,你怎么会有std::vector<Descriptor>?对于多态性,您需要拥有std::vector<Descriptor*> -
向量就像头文件中的那个,我给它分配了派生对象。我会用一个例子来编辑
-
啊,这是 C++11,所以也许我遗漏了一些在新标准中有所改变的东西......
-
哦,我看错了你的评论,可能也有问题,但编译器还没有抱怨。
-
所以应该尝试返回
std::unique_ptr的列表。 (我不能使用原始指针)
标签: c++ inheritance c++11