在C ++容器中有效地存储多态游戏对象

时间:2014-01-11 10:40:03

标签: c++ object inheritance

对于我正在研究的2D游戏,我已经制作了一个指向对象的指针。此对象是所有其他游戏对象继承的父类。所以actor就是这样一个对象,物品是,敌人是等等。包含这个向量的类(对象管理器)执行这个类的虚函数,比如run()和draw()。

对我而言,这只是一个简单的实现,我当时并没有真正考虑过。现在我已经到了实际上必须从容器中删除对象的地步。在互联网上的一些快速搜索告诉我,矢量实现适合于此任务(使用交换和弹出),但我还应该将对象本身存储在向量上以获得更高的性能。所以:不是指针而是实际的实例。这样我们就可以将它们分配到堆栈中。使用继承时这是否可能?是否有更快的方式来存储继承的游戏对象?

1 个答案:

答案 0 :(得分:3)

  

使用继承时甚至可以这样做吗?

不,如果不使用指针或引用,就无法在容器中存储多态对象。

我这样做的方法是std::vectorstd::unique_ptr的组合:

template<class T> using container = std::vector<std::unique_ptr<T>>;
container<base> vector;

通过以下方式进行推送:

vector.emplace_back(std::unique_ptr<base>(new item()));
vector.emplace_back(std::unique_ptr<base>(new enemy()));

其中base是基类,itemenemy是派生类。