我正在构建一个c ++程序,我需要在一个类中存储一个不定的(即动态的)图像。我也有无限数量的精灵对象可以显示这些图像。 现在我有这样的事情:
class Hud {
std::vector<Image> images;
std::vector<Sprite> sprites;
}
为了避免重复图像(从而占用过多的ram),我通过在Sprite对象中放置一个指向图像的指针来重新使用它们。
显然,当一个Image添加到std :: vector时,这些指针不再有任何好处。我的方法可能有问题,但我不知道如何解决这个问题。渲染正在OpenGL中完成。任何建议都会有所帮助。
如何存储我的精灵对象可以访问的动态图像数组,这样我就可以避免在内存中出现重复的图像(对于粒子效果来说这可能非常费力)?替代方法是受欢迎的,但我不能花一两天时间重写我的代码。
感谢。
答案 0 :(得分:2)
您应该存储shared_ptr
的列表,而不是Image
个对象的列表。这样,列表和Sprite
类可以共享所有权。实际上,如果您不希望Sprite
实际拥有图片,则可以存储weak_ptr
而不是shared_ptr
。虽然您更希望列表本身成为weak_ptr
的列表。
如果你没有使用支持TR1或C ++ 11的编译器,那么你可以从Boost获得这些智能指针。
或者,您可以使用std::list
。这样,您可以在列表中插入和删除内容,而不会使指针无效。
答案 1 :(得分:1)
您可以存储指向矢量中对象的指针,确保在从矢量中删除对象之前delete
。 Boost的共享指针库可能会使这更容易。