c++ - 如果我不对 COM 对象使用 Release,是否有任何内存/句柄泄漏
问题描述
我有一个使用 WASAPI 的多线程 COM 应用程序IAudioClient
。我在主线程中创建客户端并在子线程中读取音频数据。音频客户端被声明为类成员:
CComPtr<IAudioClient> audioClient;
在更改音频设备(如拔下耳机)时,我想激活另一个音频客户端但使用相同的 COM 对象,因此我Activate
为音频客户端调用相同的 COM 对象:
HRESULT hr = mmDevice->Activate( __uuidof(IAudioClient), CLSCTX_ALL, NULL, (void**)&audioClient );
如果我在激活新对象之前不释放对象,我显然会在调试中得到这个断言:
因为在创建新对象之前我需要一个空 COM 变量,所以我得到了它。但是如果我audioClient.Release()
在该Activate
函数之前使用,我的应用程序会在发布时挂起。
我可以接受这个断言(此外,它只在调试中)。但问题是我可以只创建一个新对象而不释放旧对象,它会引入任何泄漏或什么吗?或者我应该以不同的方式释放物体以避免悬挂?
解决方案
推荐阅读
- javascript - 你可以在 jquery 的函数中添加两个元素吗?
- python - Spark DataFrame 生成 beta 样本
- javascript - 我想自动将 myObj 信息输入到 HTML 表中
- wordpress - 在产品图像悬停时显示带有文本的透明 div
- python - 具有已知或未知维度的零张量
- sql-server - 将其他 LINQ 表达式添加到 ServiceStack.OrmLite 中的 SELECT 查询
- flutter - 键入'MappedListIterable
' 不是类型 'List 的子类型 ' - .htaccess - Htaccess 用 QSA 重写 url
- discord.js - Discord bot 未提及 msg.author.username
- c# - if 语句中的 C# 6.0 空条件运算符