我有一個std::map<std::string, HANDLE> SampleMap
,它將HANDLE
對象存儲爲值。在使用地圖之後,我將清除所有地圖條目。HANDLE在地圖中的對象
SampleMap.clear();
通過這樣做處理對象會發生什麼。他們被刪除?
我有一個std::map<std::string, HANDLE> SampleMap
,它將HANDLE
對象存儲爲值。在使用地圖之後,我將清除所有地圖條目。HANDLE在地圖中的對象
SampleMap.clear();
通過這樣做處理對象會發生什麼。他們被刪除?
HANDLE只是類型定義或限定到指針(AFAIK void*
)。
清除地圖時,它們不會被刪除,您必須自行關閉/釋放它們。
或寫一個包裝類,將爲您做到這一點。看到這個線程How to use C++ standard smart pointers with Windows HANDLEs?的一些開始的想法。
我相當肯定,這是相同的情況,因爲沒有關閉句柄,只是刪除本地對象引用。我擔心你每次都必須使用CloseHandle
函數。正如你可能知道的,操作系統跟蹤一個對象引用的數量,只有當它等於零時才刪除它。通知操作系統您不需要更多對象的唯一方法是使用CloseHandle
函數。否則,句柄停留在某個句柄表中,不會被刪除。
HANDLE
是種指針,所以刪除它們並沒有多大作用,爲了正確釋放這些指向的資源,必須明確調用相應的函數(如CloseHandle
)。
這樣做會發生什麼情況手柄對象
沒有。
它們被刪除了嗎?
號
他們不會被刪除,他們成爲懸掛指針/句柄。
如果您希望自動刪除,請使用std :: unique_ptr並重寫deleter對象以刪除包含的任何類型的句柄。
當他們在別處被刪除時,它們就會變成'懸掛',而不是在這種情況下。 – unkulunkulu
如果刪除你的意思是'CloseHandle()',那麼不會調用'CloseHandle()'。 – hmjd