gpt4 book ai didi

c++ - 类中的 std::vectors

转载 作者:行者123 更新时间:2023-11-30 03:05:33 25 4
gpt4 key购买 nike

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

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

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

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

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

谢谢。

最佳答案

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

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

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

关于c++ - 类中的 std::vectors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7623964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com