例如,如果我有一些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 關注
- 115 瀏覽
添加回答
舉報
0/150
提交
取消