繁体   English   中英

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

[英]Storing polymorphic game objects efficiently in a C++ container

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

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

使用继承时甚至可能吗?

不,不使用指针或引用就不可能在容器中存储多态对象。

我的方式是将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是派生类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM