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