私は 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
、クラッシュします。