例如,如果我有一些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不可收集。
现在,如果您传递&a给foo(a *A),则将a不可收集,因为c是指向它的指针。
您给出的第二个示例也传递了 的副本a,因此适用相同的参数。但是,如果您传递&a,然后返回一个指向来自 的字符串副本的指针a,a则该指针将是可收集的,但不是您返回的字符串,因为存在对其的引用。
- 1 回答
- 0 关注
- 142 浏览
添加回答
举报
0/150
提交
取消
