1

私は 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 になるまでガベージ コレクションが行われないという印象を受けましたが、これは正しいですか?

4

0 に答える 0