C ++ ComPtr回调的范围

时间:2016-08-31 20:31:01

标签: c++ asynchronous callback wrl

我一直在阅读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之前它不会被垃圾收集,这是正确的吗?

0 个答案:

没有答案