私は WRL を読んでいます。具体的には Callback と ComPtr を使用して非同期操作を実行しています。ただし、このように使用すると、ComPtr の有効期間について明確な答えが得られないようです。Callback は async 関数が返す情報を利用しますが、アプリケーションからの他の情報には依存しないため、その完了を待ちたくありません。例えば:
void SomeFunction()
{
ComPtr<IAsyncOperation<...*>> pOperation;
//Activate instance and call async function
pOperation->put_Completed(Callback<IAsyncOperationCompletedHander<...*>[...](...)
{
//Logic to be completed when Async call finishes
}).Get());
//Function exits here, process keeps running. Is pOperation going to get cleaned up?
}
ComPtr はスマート ポインターであるため、コールバックが完了して refcount == 0 になるまでガベージ コレクションが行われないという印象を受けましたが、これは正しいですか?