c++:如何删除在异步函数中创建/修改的指针?



我很困惑如何删除已经从异步函数调用的指针。我有什么:

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;
}

我不太确定做这件事的适当设计。我的第一个想法是在调用函数之前创建新的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循环中创建的每个新对象的地址,并删除循环之后的所有内容。。然而,我不确定这是否是正确的设计。你能建议一个解决这个问题的方法吗?我想我主要需要一个设计/如何删除一个函数(ii)内创建的指针(I)在一个for循环的例子。由于

获取并返回std::shared_ptr<Obj>,表示指针的所有权是共享的。当每个人都用完它(所有的shared_ptr都超出了作用域)时,这也会自动负责释放Obj。

参考std::make_shared来创建一个简单的共享指针。

最新更新