在矢量中存储对象

时间:2010-09-05 11:21:12

标签: c++ libstdc++

是否有可能没有专门的矢量?

我的问题是:我有一个抽象类N4GestureRecognizer 以及它的几个子类。 所以在一个Controller类中我想要一个vector<N4GestureRecognizer> recognizers_但是因为它是抽象的我不能。 如何将这个识别器存储在矢量或集合或列表中,或者在标准c ++中可以循环使用?

2 个答案:

答案 0 :(得分:5)

将它们存储为指针。无论是纯指针还是一些智能指针类。

<强> EXTRA 实际上,指针是唯一的方法,即使该类不是摘要,但是是子类,并且子类也打算在向量中使用。原因:std :: vector为每个元素分配sizeof(T)字节,但sizeof(derivedFromT)可能大于sizeof(T)。您可以将子对象推送到向量中,但它可能会在运行时导致不可预测的问题。

当然,管理指针向量是一种痛苦,但据我记忆,boost包含一些智能指针来简化任务。

答案 1 :(得分:1)

您需要的是std::vector< std::shared_ptr<N4GestureRecognizer> >

如果您的std lib没有std::shared_ptr(它是下一个C ++标准的一部分,预计将在明年发布),它可能会附带std::tr1::shared_ptr,这是相同的(作为官方技术报告1 的当前C ++标准。如果失败,则总是boost,其中boost:shared_ptrstd::tr1::shared_ptrstd::shared_ptr的前身)。

注意:不要使用裸指针(std::vector<N4GestureRecognizer*>)。几乎没有办法使这个安全,所以它不会泄漏。