【发布时间】:2016-02-04 03:07:58
【问题描述】:
我创建一个new std::thread 对象,然后创建detach() 它。线程运行任意时间,然后自行终止。由于我使用new 创建了对象,我是否需要在某些时候delete 来释放它的资源?还是线程在终止时有效地delete 本身?
如果它本身有效地delete,如果我在它终止后明确地delete 它会发生什么不好的事情吗?
【问题讨论】:
-
小心,您使用的是“它”这个词,有时很难判断您是指线程本身还是 std::thread 对象。
-
一个很好的方法来启动一个分离的
thread:std::thread(f, a0, a1, ...).detach();不需要新的。无需删除它。没有机会忘记detach()它。在您的构造和分离点之间不会引发异常。 -
@DavidSchwartz 不确定我是否理解 - 为什么线程和 std::thread 对象不同?
-
@StuartBarth 线程是一种执行工具,它可能有也可能没有相应的 std::thread 对象。 std::thread 对象是 C++ 类的实例,它可能有也可能没有相应的线程。例如,您说“线程是否在终止时有效地删除自己”。这意味着什么?您是否在询问线程终止时线程是否删除了 std::thread 对象?显然它不能,因为如果构造 std::thread 的线程在线程终止时访问该对象,那将导致灾难。这就是你要问的吗?
标签: c++ multithreading c++11 stdthread