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())
将不会被调用。当它们在其他位置被删除时,它们将变为“挂起”,而不是在本例中。当它们在其他位置被删除时,它们将变为“挂起”,而不是在本例中。