我正在使用 SAPI5 API 来处理文本到语音。如果我简化我的代码看起来像这样(我删除了错误检查以尽可能简化它):
int main() {
CoInitialize(NULL);
CComPtr<ISpVoice> spVoice;
spVoice.CoCreateInstance(CLSID_SpVoice);
...
CoUninitialize();
return 0;
}
由于某些奇怪的原因,如果我不调用 spVoice.Release(),我的代码就会崩溃。所以上面的代码崩溃了,但是这段代码运行良好:
int main() {
CoInitialize(NULL);
CComPtr<ISpVoice> spVoice;
spVoice.CoCreateInstance(CLSID_SpVoice);
...
spVoice.Release();
CoUninitialize();
return 0;
}
CComPtr
超出范围时不会自动释放底层对象吗?
我查看了它的实现,CComPtr
它确实调用Release
了析构函数本身。
所以我想知道可能出了什么问题,为什么如果我打电话给Release
自己,我的代码不会崩溃。但是,如果我不打电话Release
,那么它就会崩溃。