簡體   English   中英

使用Go中的指針值清除地圖

[英]Clearing a map with a pointer value in Go

我有一個map [string] * list.List,每個列表節點也是一個指針。 通過簡單地將地圖清除為nil,將清除所有地圖和列表以及所有指針並進行垃圾收集並准備再次使用?

type UnrolledGroup struct {                                                                                                                                          
    next int
    s    []uint32
 }

 var dictionary = struct {
     m    map[string]*list.List
     keys []string                                                                                                                                                    
 }{m: make(map[string]*list.List)}

 l := list.New()
 newGroup := UnrolledGroup{next: 1, s: make([]uint32, groupLen)}
 newGroup.s[0] = pos
 l.PushBack(&newGroup)
 dictionary.m[token] = l

現在這清楚了整個事情嗎?

 dictionary.m = nil

這取決於:如果它不再“可達”,那么一切都是GC。 如果您對地圖中存儲的內容保留其他引用,則不會收集。 如果地圖是這些對象的唯一根,則會收集它們。 (不要過多考慮這些東西。)

map是引用類型,即它是底層結構的指針類型。 您可以將指針設置為nil ,但如果其他人有指向同一底層結構的指針,那么他們仍然可以引用內部的所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM