游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1716|回复: 4

请教:如何控制资源释放在设备之前?

[复制链接]

34

主题

70

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2008-3-18 10:45:00 | 显示全部楼层 |阅读模式
    我通过智能指针share_ptr来管理资源,比如纹理,顶点/索引缓冲,音频缓冲等.但这些资源需要保证在设备被释放前释放.比如OpenAL里,如果在音频特效释放之前先把上下文删除了,音频资源的释放就会报错.
    大概情况是这样的:
    Audio_Device* device = Audio_Device::create_device("oal_device.dll");
    device->init_device(...);
    Audio_Buffer_Static_SPtr buffer = device->create_audio_buffer_static("Footsteps.wav");
    .....//播放声音之类的
    delete device;

    但是由于buffer的释放是由share_ptr管理的,结果buffer的释放就在device之后了.即使把device包装在一个智能指针里面也不能解决释放顺序的问题.
    难道说非要在buffer使用的部分加一对{}来保证它释放么,如果在更复杂的程序里面这个方法也行不通.
    请教有没有什么好的方法?

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2008-3-18 23:04:00 | 显示全部楼层

Re:请教:如何控制资源释放在设备之前?

不用智能指针

34

主题

70

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2008-3-19 10:31:00 | 显示全部楼层

Re:请教:如何控制资源释放在设备之前?

但是我希望通过智能指针来管理资源啊.难道因为释放问题就要放弃智能指针的好处?
有没有什么方法能控制程序结束时智能指针释放顺序的?

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2008-3-19 22:39:00 | 显示全部楼层

Re:请教:如何控制资源释放在设备之前?

用智能指针来管理资源是不可取的.你现在遇到的问题恰恰证明了我的观点.

34

主题

70

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2008-3-19 23:52:00 | 显示全部楼层

Re:请教:如何控制资源释放在设备之前?

最后我把device改成了用侵入式的智能指针,然后可以自己操作引用记数.在每个资源建立的时候也将device的引用加一,释放的时候减1.可能这么做有些麻烦.
不过请教下游戏引擎里面一般比较好的管理资源有哪些方法呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 11:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表