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

Does a detached std::thread need to be deleted after it terminates?

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

如果它本身有效 delete,如果我在它终止后显式 delete 它会不会发生不好的事情?

是的,您必须 delete 自己完成。

一旦你调用了std::thread::detach,线程就会从线程对象中分离出来,让其独立继续执行,然后线程对象将不再拥有任何线程。所以线程不会也不可能在终止时delete它。

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

线程是一个对象"located within OS"(通常)。它使用 std::thread 构造函数创建并使用 detach().

释放

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

所以你必须同时释放 - OS-object 和 C++-object。


更新。当您创建线程时,OS 在 kernel space 中分配内部结构来控制它。每个线程都有一组属性,如状态(运行、挂起、等待资源)、优先级、return 代码等。