类中的std :: vectors

时间:2011-10-02 01:02:36

标签: c++ arrays class vector

我正在构建一个c ++程序,我需要在一个类中存储一个不定的(即动态的)图像。我也有无限数量的精灵对象可以显示这些图像。 现在我有这样的事情:

class Hud {
  std::vector<Image> images;
  std::vector<Sprite> sprites;
}

为了避免重复图像(从而占用过多的ram),我通过在Sprite对象中放置一个指向图像的指针来重新使用它们。

显然,当一个Image添加到std :: vector时,这些指针不再有任何好处。我的方法可能有问题,但我不知道如何解决这个问题。渲染正在OpenGL中完成。任何建议都会有所帮助。

如何存储我的精灵对象可以访问的动态图像数组,这样我就可以避免在内存中出现重复的图像(对于粒子效果来说这可能非常费力)?替代方法是受欢迎的,但我不能花一两天时间重写我的代码。

感谢。

2 个答案:

答案 0 :(得分:2)

您应该存储shared_ptr的列表,而不是Image个对象的列表。这样,列表和Sprite类可以共享所有权。实际上,如果您不希望Sprite实际拥有图片,则可以存储weak_ptr而不是shared_ptr。虽然您更希望列表本身成为weak_ptr的列表。

如果你没有使用支持TR1或C ++ 11的编译器,那么你可以从Boost获得这些智能指针。

或者,您可以使用std::list。这样,您可以在列表中插入和删除内容,而不会使指针无效。

答案 1 :(得分:1)

您可以存储指向矢量中对象的指针,确保在从矢量中删除对象之前delete。 Boost的共享指针库可能会使这更容易。