首页 文章

golang map值由值或引用返回? [重复]

提问于
浏览
-1

这个问题在这里已有答案:

让我有一个带有字符串键和指向结构的指针值的映射

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

我得到了值并稍后删除了该条目

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

我的问题是,由于从 Map 中删除了指向它的指针,内存是否会被垃圾收集?另一方面,我在删除条目之前有新指针 en ,它的指针副本也指向同一个内存位置,因此即使删除了映射条目,内存也不会被垃圾回收?我很困惑,帮助升值 .

1 回答

  • 0

    Go的当前实现是parallel mark-and-sweep垃圾收集器 .

    准确地说,在声明 entity 的范围内,由于您提到的相同原因,此对象不会被收集 - 在从 Map 中删除后仍然存在对该对象的引用 .

    映射的状态是内部的,只有在删除操作后才会从那里删除 .

相关问题