在矢量中存储对象

nac*_*o4d 1 c++ libstdc++

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

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

Gob*_*bra 5

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

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

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

  • 这些天标准有智能指针:std :: tr1 :: shared_ptr <> (2认同)
  • 运行时将派生类推送到这样的向量中的结果不是"不可预测的".它被称为切片,它是非常可预测的(尽管新手可能会意外). (2认同)