分离的std :: thread在终止后是否需要删除?

时间:2016-02-04 03:07:59

标签: c++ multithreading c++11 stdthread

我创建了一个new std :: thread对象,然后detach()。线程运行任意一段时间,然后自行终止。由于我使用new创建了对象,我是否需要delete在某个时刻释放它的资源?或者线程在终止时是否有效delete

如果它本身有效delete,那么如果我在终止后明确delete它会发生什么不好的事情吗?

2 个答案:

答案 0 :(得分:6)

是的,你必须自己delete

一旦调用std::thread::detach,线程将与线程对象分离并允许执行独立继续,然后线程对象将不再拥有任何线程。所以线程在终止时不会也不可能delete

答案 1 :(得分:1)

必须使用new发布使用delete分配的C ++中的每个对象。

线程是“位于OS内”的对象(通常)。它是使用std::thread构造函数创建的,并随detach()一起发布。

std::thread的对象是一个与该线程关联的С++ - 对象。

所以你必须同时发布--OS-object和C ++ - object。

UPD。在创建线程时,操作系统会在kernel space内分配内部结构来控制它。每个线程都有一组属性,如状态(运行,挂起,等待资源),优先级,返回码等。