No problem, thanks! On Fri, Jul 24, 2020 at 8:26 PM Ian Lance Taylor <i...@golang.org> wrote:
> On Fri, Jul 24, 2020 at 4:25 PM burak serdar <bser...@computer.org> wrote: > > > > On Fri, Jul 24, 2020 at 5:21 PM Ian Lance Taylor <i...@golang.org> > wrote: > > > > > > On Fri, Jul 24, 2020 at 4:07 PM Tony Yang <tonyy...@umich.edu> wrote: > > > > > > > > Hi Go community, > > > > > > > > I am wondering if a method with the pointer receiver keeps the > receiver instance from garbage collected. > > > > > > > > To put the idea into a code example > > > > > > > > ``` > > > > type counter struct { > > > > c int > > > > } > > > > > > > > func (c *counter) next() int { > > > > c.c = c.c + 1 > > > > return c.c > > > > } > > > > > > > > func getNextFunc() func () int { > > > > // Question: will c be garbage collected after the function retruns? > > > > c := &counter{} > > > > return c.next > > > > } > > > > > > The mere existence of a pointer receiver does not prevent a value from > > > being garbage collected. In your example, if the counter value is > > > allocated on the heap in getNextFunc, that heap allocation can be > > > collected after getNextFunc returns (in practice in this example c > > > would be allocated on the stack, not the heap, anyhow). > > > > > > What is returned from the function is a method, though. Isn't that > > essentially a closure keeping a reference to c, and thus, c has to be > > allocated on the heap, and cannot be garbage collected until the > > returned function leaves the scope? > > My apologies, I completely missed that you returned a method rather > than calling the method. > > Yes, doing this will prevent c from garbage collected. Otherwise it > would be impossible to call the returned function safely. > > Ian > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CADhGDyXUcf9WtN7s-S_rbHkeWK8dX1v-Q2crAv7K5vQVfbDLJQ%40mail.gmail.com.