2017-07-26 66 views
-1

讓我有一個字符串和指針的值的鍵映射到一個struct通過值或引用返回的golang映射值?

type Entity struct{} 
entity := &Entity{} 
m := map[string]*Entity{"foo":entity} 

我得到的價值和刪除條目後

en := m["foo"] 
delete(m, "foo") 

我的問題是,將內存中的垃圾因爲指向它的指針從地圖中移除了嗎?另一方面,我有新的指針en在我刪除條目之前,它的指針副本也指向了相同的內存位置,所以即使映射條目被刪除,內存也不會被垃圾收集?我很困惑,幫助表示讚賞。

+0

感謝@icza指向另一個帖子已經有答案。 –

+0

此代碼片斷顯示,如果使用另一個指針來存儲地址,則內存不會被垃圾收集 https://play.golang.org/p/YC4ax6k6dm –

回答

0

Go的當前實現是一個parallel mark-and-sweep垃圾回收器。

確切地說,在聲明entity的範圍內,由於您提到的相同原因,此對象不會被垃圾收集,在從地圖刪除後仍然存在對該對象的引用。

地圖的狀態是內部的,它只會在刪除操作後從那裏刪除。