我有一个std::map<std::string, HANDLE> SampleMap
将HANDLE
对象存储为值。使用地图后,我正在清除所有地图条目。
SampleMap.clear();
通过这样做,句柄对象会发生什么。他们会被删除吗?
HANDLE 只是 typedef 或指针的定义(AFAIK void*
)。
清除地图时,它们不会被删除,您必须自己关闭/释放它们。
或者编写一个包装类来为你做这件事。请参阅此线程如何将 C++ 标准智能指针与 Windows HANDLE 一起使用?一些初步的想法。
s 是一种指针,因此HANDLE
删除它们并没有多大作用,要正确释放这些HANDLE
s 指向的资源,您必须显式调用相应的函数(如CloseHandle
)。
它们不会被删除,它们会变成悬空指针/句柄。
如果要自动删除,请使用 std::unique_ptr 并覆盖删除器对象以删除包含的任何类型的句柄。
我很确定这与不关闭句柄并仅删除本地对象引用的情况相同。恐怕您CloseHandle
每次都必须使用功能。正如您可能知道的那样,操作系统会跟踪对对象的引用次数,并仅在它等于零时将其删除。通知操作系统您不再需要该对象的唯一方法是使用CloseHandle
函数。否则句柄会留在某个句柄表中,不会被删除。
通过这样做,句柄对象会发生什么
没有什么。
他们会被删除吗?
不。