例如,如果我有一些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 关注
- 89 浏览
添加回答
举报
0/150
提交
取消