簡體   English   中英

c++:如何刪除在異步 function 中創建/修改的指針?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM