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

例如,如果我有一些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


白衣染霜花
浏览 65回答 1
1回答

犯罪嫌疑人X

在第一个示例中,假设在a调用后未使用foo(a),a是可收集的,因为您a按值传递。该函数返回了一个指向 的副本中的值的指针a,因此a变得可收集,但在函数中创建的副本foo不可收集。现在,如果您传递&a给foo(a *A),则将a不可收集,因为c是指向它的指针。您给出的第二个示例也传递了 的副本a,因此适用相同的参数。但是,如果您传递&a,然后返回一个指向来自 的字符串副本的指针a,a则该指针将是可收集的,但不是您返回的字符串,因为存在对其的引用。
打开App,查看更多内容
随时随地看视频慕课网APP