删除 NULL 指针是安全的。
int* p = NULL;
delete p; // ok, secure
句柄是什么?
HANDLE h = NULL;
CloseHandle(h); // allowed?
我正在阅读 MSDN但仍然不确定。它说了一些关于 ERROR_INVALID_HANDLE 的内容,但它是 6L,而不是 NULL。
我来自一个类的析构函数,它给我一个 C6387 警告 Error
if (m_hThread)
WaitForSingleObject(m_hThread, INFINITE);
CloseHandle(m_hThread); // warninig C6387
m_hThread = NULL;
最佳答案
没有。您不能在 NULL 句柄上调用 CloseHandle
。查看参数的文档。它说:
hObject [in] A valid handle to an open object.
NULL 不是打开对象的句柄。
您获得 C6387 的事实正是因为您将“可能为空”的句柄传递给 CloseHandle
。
您必须将代码编写为:
if (m_hThread) {
WaitForSingleObject(m_hThread, INFINITE);
CloseHandle(m_hThread);
}
(在此之后将 m_hThread 设置为 NULL 没有意义 - 它会在很短的时间内不复存在)。
关于c++ - 调用 handle 为 NULL 的 CloseHandle(handle) 是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47575594/