私は動的にスレッドを作成しています:
auto thr =new std::future<void>(std::async(/*some callable*/));
これらすべてのポインターをstd::vector<future<void>*>
. メモリを解放するために、私は次のようにしています:
for(int i(0);i<futureVector.size();i++)
{
if(futureVector.at(i)->valid())
{
futureVector.at(i)->get(); // for getting exception,if any
}
delete futureVector.at(i); // the problem is here
}
私のコードでは、割り当てられたメモリfutureVector.at(i)
がすでに解放されている可能性があります(おそらく他のスレッドで、他の関数によって)。私の質問は、ポインターfutureVector.at(i)
が有効かどうかを検出する方法です。有効std::future
かどうかを指しているということですか?
注:futureVector
変数は私のクラスの静的メンバーです。
そのオブジェクトを削除しないfuture
と、コストが非常に大きくなります(すでに取得された未来)