我有一些代码可以std::thread
从C ++ 11<thread>
标头动态分配新的代码,如下所示:
std::thread *th = new thread( /* my args */);
一段时间后,我打电话给join:
th->join();
由于我是动态分配线程的,因此是否还需要调用delete th;
以释放内存?如果可以,我还需join()
要先打电话吗?
为避免内存泄漏,您需要同时执行以下操作:join
运行线程,并确保销毁/删除了线程(让它超出堆栈分配范围,std::threads
或显式调用delete std::thread*
)。
参见cppreference中的thread ::〜thread:
在以下情况下,线程对象没有关联的线程(并且可以安全地销毁):
- 它是默认构造的
- 它从
- join()已被调用
- detach()已被调用
因此,无法安全地销毁未连接的线程。
一join()
版std::thread
仍然会占据一些内存。因此,如果它在堆上,则需要确保已正确释放它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句