为了账号安全,请及时绑定邮箱和手机立即绑定

对结构内字段的外部引用是否会阻止该结构被垃圾收集?

对结构内字段的外部引用是否会阻止该结构被垃圾收集?

Go
白衣染霜花 2023-07-26 13:08:47
例如,如果我有一些type A struct { B string; C int },并且我有一个func foo(a A) *string { return &a.B },并且我用 来调用它c := foo(a),则a一定会保留在上下文中直到c可收集吗?或者,如果我定义,这会对收集func foo1(a A) *string { s := a.B; return &s }时间产生影响吗?A
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

在第一个示例中,假设在a调用后未使用foo(a)a是可收集的,因为您a按值传递。该函数返回了一个指向 的副本中的值的指针a,因此a变得可收集,但在函数中创建的副本foo不可收集。

现在,如果您传递&afoo(a *A),则将a不可收集,因为c是指向它的指针。

您给出的第二个示例也传递了 的副本a,因此适用相同的参数。但是,如果您传递&a,然后返回一个指向来自 的字符串副本的指针aa则该指针将是可收集的,但不是您返回的字符串,因为存在对其的引用。


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信