C++ 在地图中处理对象

C++ 在地图中处理对象,c++,map,handle,C++,Map,Handle,我有一个std::map SampleMap,它将HANDLE对象存储为值。使用地图后,我将清除所有地图条目 SampleMap.clear(); 这样做会对句柄对象产生什么影响。它们被删除了吗?我确信这与不关闭句柄而只是删除本地对象引用的情况相同。恐怕您每次都必须使用CloseHandle功能。正如您可能知道的那样,操作系统会跟踪对象的引用数量,并且只有当它等于零时才会删除它。通知操作系统不再需要对象的唯一方法是使用CloseHandle函数。否则,句柄将保留在某个句柄表中,并且不会被删除

我有一个
std::map SampleMap
,它将
HANDLE
对象存储为值。使用地图后,我将清除所有地图条目

SampleMap.clear();

这样做会对句柄对象产生什么影响。它们被删除了吗?

我确信这与不关闭句柄而只是删除本地对象引用的情况相同。恐怕您每次都必须使用
CloseHandle
功能。正如您可能知道的那样,操作系统会跟踪对象的引用数量,并且只有当它等于零时才会删除它。通知操作系统不再需要对象的唯一方法是使用
CloseHandle
函数。否则,句柄将保留在某个句柄表中,并且不会被删除

我确信这与不关闭句柄而只是删除本地对象引用的情况相同。恐怕您每次都必须使用
CloseHandle
功能。正如您可能知道的那样,操作系统会跟踪对象的引用数量,并且只有当它等于零时才会删除它。通知操作系统不再需要对象的唯一方法是使用
CloseHandle
函数。否则,句柄将保留在某个句柄表中,并且不会被删除

HANDLEs是一种指针,因此删除它们没有什么作用,要正确释放这些
HANDLE
s所指向的资源,您必须显式调用相应的函数(如
CloseHandle
)。

HANDLEs是一种指针,因此删除它们没有什么作用,要正确释放这些
HANDLE
s指向的资源,必须显式调用相应的函数(如
CloseHandle

这样做会对句柄对象产生什么影响

没什么

他们被删除了吗

没有

这样做会对句柄对象产生什么影响

没什么

他们被删除了吗


不。

句柄只是指向指针的typedef或定义(AFAIK
void*

清除地图时,它们不会被删除,您必须自己关闭/释放它们


或者编写一个包装器类来为您实现这一点。请参阅此线程以了解一些起始想法。

句柄只是指向指针的typedef或定义(AFAIK
void*

清除地图时,它们不会被删除,您必须自己关闭/释放它们


或者编写一个包装器类来为您实现这一点。查看此线程以了解一些起始想法。

它们不会被删除,而是成为悬垂的指针/句柄


如果希望自动删除,请使用std::unique_ptr并重写deleter对象以删除包含的任何类型的句柄。

它们不会被删除,而是成为悬空指针/句柄


如果要自动删除,请使用std::unique\u ptr并重写deleter对象以删除包含的任何类型的句柄。

如果“删除”是指
CloseHandle()
,则不会调用“否”
CloseHandle()
。如果“删除”是指
CloseHandle()
,则“否”
CloseHandle())
将不会被调用。当它们在其他位置被删除时,它们将变为“挂起”,而不是在本例中。当它们在其他位置被删除时,它们将变为“挂起”,而不是在本例中。