[英]c++: how to delete a pointer created/modified in an async function?
我很困惑如何刪除從異步 function 調用的指針。我有什么:
Obj* doStuff(int size){
Obj *myObject = new Obj(size);//where do I delete this?
myObject.doSomeOtherStuffWhichChangesMyObject();
return myObject;
}
int main (){
for (int i = 0; i < CORES; i++)
{
std::shared_future<Obj*> f = std::async(std::launch::async, doStuff,5);
futures.push_back(f);
}
return;
}
我不太確定這樣做的正確設計。 我的第一個想法是在調用 function 之前創建新的 Obj*:
Obj* doStuff(Obj *myObject){
myObject.doSomeOtherStuffWhichChangesMyObject();
return myObject;
}
int main (){
for (int i = 0; i < CORES; i++)
{
Obj *myObject = new Obj(5);//where do I delete this?
std::shared_future<Obj*> f = std::async(std::launch::async, doStuff, myObject);
futures.push_back(f);
}
return;
}
然后我意識到我無法刪除新的 Obj,因為它已被其他異步進程使用。 所以我最后的解決方案是在for循環之前創建一個雙指針 ** 來存儲在 for 循環中創建的每個新 Obj 的地址,並刪除循環之后的所有內容。 但是,我不確定這是否是正確的設計。 你能建議一種解決這個問題的方法嗎? 我想我主要需要一個設計/示例,說明如何刪除在 for 循環內的 function (ii) 內創建的指針 (i)。 謝謝
獲取並返回std::shared_ptr<Obj>
以表示指針的所有權是共享的。 當每個人都完成它時,這也將自動負責釋放 Obj(所有 shared_ptr go 超出范圍)。
查看 std::make_shared 以了解創建共享指針的簡單方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.