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

Is this an acceptable way of managing resources?

本文关键字:资源管理 资源 管理方 可接受 一种      更新时间:2023-10-16

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

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

对于一款小型电子游戏来说,这是一个好的设计吗?

谢谢

你所描述的是一个结合了智能指针/作用域指针的工厂模式。

这很合理。只需考虑是否真的需要使用字符串来标识资源。一个enum就足够了。

如果您的管理器返回普通指针,这里就会出现问题-资源将一直挂在那里,直到管理器本身被销毁(这是低效的,特别是对于像位图这样的资源),或者直到您显式调用管理器来摆脱它们,如果抛出异常,这可能不会发生。管理器最好返回某种类型的智能指针,以便在资源使用完毕时通知管理器。

这听起来有点像一个智能指针,如果它在超出作用域时自动释放它自己

您可能需要考虑boost::intrusive_ptr,以便对所有对象进行ref计数。然后,如果需要的话,您可以在管理器中手动处理它们。

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