gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:07:58 24 4
gpt4 key购买 nike

例如,如果我有一些 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 有什么影响吗?

最佳答案

在第一个例子中,假设 a 在调用 foo(a) 之后没有被使用,a 是可收集的,因为你通过了 a 按值。该函数返回一个指向 a 副本中的值的指针,因此 a 变得可收集,但在函数 foo 中创建的副本不可收集收藏品。

现在,如果您将 &a 传递给 foo(a *A),那么 a 将不可回收,因为 c 是指向它的指针。

您给出的第二个示例还传递了 a 的副本,因此适用相同的参数。但是,如果您传递了 &a,然后返回指向从 a 复制字符串的指针,a 将是可收集的,但字符串不是你回来了,因为有对它的引用。

关于go - 对结构中字段的外部引用是否会阻止该结构被垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57926928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com