例如,如果我有一些type A struct { B string; C int },并且我有一個func foo(a A) *string { return &a.B },并且我用 來調(diào)用它c := foo(a),則a一定會保留在上下文中直到c可收集嗎?或者,如果我定義,這會對收集func foo1(a A) *string { s := a.B; return &s }時間產(chǎn)生影響嗎?A
1 回答

犯罪嫌疑人X
TA貢獻2080條經(jīng)驗 獲得超4個贊
在第一個示例中,假設(shè)在a
調(diào)用后未使用foo(a)
,a
是可收集的,因為您a
按值傳遞。該函數(shù)返回了一個指向 的副本中的值的指針a
,因此a
變得可收集,但在函數(shù)中創(chuàng)建的副本foo
不可收集。
現(xiàn)在,如果您傳遞&a
給foo(a *A)
,則將a
不可收集,因為c
是指向它的指針。
您給出的第二個示例也傳遞了 的副本a
,因此適用相同的參數(shù)。但是,如果您傳遞&a
,然后返回一個指向來自 的字符串副本的指針a
,a
則該指針將是可收集的,但不是您返回的字符串,因為存在對其的引用。
- 1 回答
- 0 關(guān)注
- 122 瀏覽
添加回答
舉報
0/150
提交
取消