我开始练习使用 C++11 std::thread
。通常,对于 Win32,只要我有线程句柄,我就需要调用 CloseHandle
。当我使用 C++11 native_handle
时,是否仍需要调用 CloseHandle
?另外,如果我不使用 C++11 native 句柄,线程句柄是否得到正确清理?
最佳答案
当然不是。
线程对象有一个析构函数,它释放对象可能获取的任何操作系统特定资源。
实际上,每个(好的)C++ 对象都有一个析构函数,可以清除需要清理的所有内容,并且这个析构函数(当代码编写正确时) 由程序自动调用。
这个习语被称为 RAII - 每个对象都有一个构造函数来收集对象所需的资源,以及一个对等析构函数,当对象超出范围时释放它们。
如果操作得当,这项技术比 C 风格的手动资源管理或“高级”垃圾收集器强大得多。
忠告,如果标准为您提供了一些实用程序,请完全忽略相应的 Win32 API。标准不依赖操作系统特定的API才能正常工作。
关于c++ - 使用 C++11 std::thread native_handle 以及我是否需要 CloseHandle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38934749/