2012-06-26 31 views
1

我有一個std::map<std::string, HANDLE> SampleMap,它將HANDLE對象存儲爲值。在使用地圖之後,我將清除所有地圖條目。HANDLE在地圖中的對象

SampleMap.clear(); 

通過這樣做處理對象會發生什麼。他們被刪除?

+1

如果刪除你的意思是'CloseHandle()',那麼不會調用'CloseHandle()'。 – hmjd

回答

0

我相當肯定,這是相同的情況,因爲沒有關閉句柄,只是刪除本地對象引用。我擔心你每次都必須使用CloseHandle函數。正如你可能知道的,操作系統跟蹤一個對象引用的數量,只有當它等於零時才刪除它。通知操作系統您不需要更多對象的唯一方法是使用CloseHandle函數。否則,句柄停留在某個句柄表中,不會被刪除。

1

HANDLE是種指針,所以刪除它們並沒有多大作用,爲了正確釋放這些指向的資源,必須明確調用相應的函數(如CloseHandle)。

0

這樣做會發生什麼情況手柄對象

沒有。

它們被刪除了嗎?

1

他們不會被刪除,他們成爲懸掛指針/句柄。

如果您希望自動刪除,請使用std :: unique_ptr並重寫deleter對象以刪除包含的任何類型的句柄。

+0

當他們在別處被刪除時,它們就會變成'懸掛',而不是在這種情況下。 – unkulunkulu