是否有可能没有专门的矢量?
我的问题是:我有一个抽象类N4GestureRecognizer
以及它的几个子类。
所以在一个Controller类中我想要一个vector<N4GestureRecognizer> recognizers_
但是因为它是抽象的我不能。
如何将这个识别器存储在矢量或集合或列表中,或者在标准c ++中可以循环使用?
答案 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_ptr
(std::tr1::shared_ptr
和std::shared_ptr
的前身)。
注意:不要使用裸指针(std::vector<N4GestureRecognizer*>
)。几乎没有办法使这个安全,所以它不会泄漏。