这是一种可接受的资源管理方式吗?

时间:2011-04-18 15:40:00

标签: c++ memory-management

为了管理游戏中的各种资源(字体位图等),我想创建将字符串映射到任何资源的管理器。当此对象超出范围时,释放资源使用的所有内存。

所以基本上如果你想要一个Font,你要么添加它,要么用一个指示其名称的字符串请求它,它会返回一个指向它的指针。这样用户就不必管理任何内存。

这是一款适合小型视频游戏的好设计吗?

由于

4 个答案:

答案 0 :(得分:2)

您所描述的是工厂模式与智能指针/范围指针相结合。

这很合理。只要考虑一下你是否真的需要使用字符串来识别资源。枚举可能就足够了。

答案 1 :(得分:2)

如果你的经理返回普通指针,那么这里有一个问题 - 资源会一直存在,直到管理器本身被销毁(这是低效的,特别是对于位图这样的资源),或者直到你明确调用管理器才能摆脱它其中,如果抛出异常,可能不会发生这种情况。对于管理器来说,返回某种类型的智能指针会更好,这些指针可以在资源完成时通知管理器。

答案 2 :(得分:0)

听起来有点像smart pointer,如果它超出范围时自动解除分配。

答案 3 :(得分:0)

您可能需要考虑boost::intrusive_ptr,以便重新计算所有对象。然后,您可以根据需要从经理内部手动处理它们。

当然,您可以编写自己的智能指针类,或者您可以从已经拥有的人那里获取它:
http://www.boost.org/doc/libs/1_46_1/libs/smart_ptr/smart_ptr.htm