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