次のように、C++ 11 _std::thread_ヘッダーから新しい_<thread>_を動的に割り当てるコードがあります。
std::thread
<thread>
_std::thread *th = new thread( /* my args */); _
std::thread *th = new thread( /* my args */);
しばらくして、私は参加を呼び出します:
_th->join(); _
th->join();
スレッドを動的に割り当てたので、メモリを解放するために_delete th;_も呼び出す必要がありますか?その場合でも、最初にjoin()を呼び出す必要がありますか?
delete th;
join()
はい、スレッドオブジェクトを破棄する前にjoinを呼び出す必要があります。結合可能なstd::threadオブジェクトのデストラクタが呼び出されると(つまり、 joinable がtrueを返す場合)、std::terminateが呼び出されます。したがって、スレッドを破棄する前にjoinを呼び出す必要があります。これは、(ヒープ上のスレッドの場合)deleteを呼び出すか、正常に破棄されるかによって異なります。
join
joinable
std::terminate
メモリリークを防ぐには、他のヒープ割り当て変数と同様に、deleteを呼び出す必要があります。
std::threadの詳細については、 こちら を参照してください。