首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类中的std::vectors

类中的std::vectors
EN

Stack Overflow用户
提问于 2011-10-02 09:02:36
回答 2查看 173关注 0票数 1

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

代码语言:javascript
复制
class Hud {
  std::vector<Image> images;
  std::vector<Sprite> sprites;
}

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

显然,当Image被添加到std::vector中时,这些指针就不再有用了。我的方法可能有问题,但我不确定如何解决这个问题。渲染正在OpenGL中完成。任何建议都会很有帮助。

我如何存储可以被我的sprite对象访问的图像的动态数组,并允许我在内存中避免重复的图像(这对于粒子效果来说可能是非常繁琐的)?替代方法将是受欢迎的,但我不能花费超过一两天的时间重写我的代码。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-02 09:17:05

您应该存储shared_ptr的列表,而不是Image对象的列表。这样,list和Sprite类就可以共享所有权。实际上,如果您不希望Sprite实际拥有图像,他们可以存储weak_ptr而不是shared_ptr。尽管您更可能希望列表本身是一个weak_ptr列表。

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-10-02 09:13:22

可以将指向对象的指针存储在向量中,确保在从向量中擦除对象之前对其执行delete操作。Boost的共享指针库可能会让这一切变得更容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7623964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档