假設以下代碼:如何在lambda函數中引用捕獲的智能指針?
void SomeClass::SomeMethod()
{
CComPtr<ISomeService> service = GetService();
ExecuteInNewThread([&]()
{
service->AnotherMethod();
});
}
功能ExecuteInNewThread執行新線程功能對象從而服務指針將被釋放後可以執行lambda函數。 防止這種情況的最佳方法是什麼?在SomeMethod中執行AddRef()和在lambda結尾的Release()看起來很醜。
爲什麼不按值捕獲智能指針? (我不知道CCompPtr是/什麼。) – Mat
通過引用捕獲在新線程中執行的函數的局部變量是很奇怪的......並且是錯誤的。 – Griwes
@Mat,謝謝。我只是忘記了有一個選項可以通過lambdas中的值捕獲變量。 – vkrzv