1

我一直在阅读 WRL,特别是使用 Callback 和 ComPtr 来实现异步操作。但是,以这种方式使用时,我似乎无法得到关于 ComPtr 生命周期的明确答案。回调利用异步函数返回的信息,但不依赖应用程序的任何其他信息,所以我不想等待它的完成。例如:

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