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? > > 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/CAOyqgcWtFocDKraHsR-fqadrKgYxc%2B5K9e9u1rM7K%3DRj3oLXMw%40mail.gmail.com. -- 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/CAMV2RqrVhCWyKrDxH_vC_CmeQ4OLh0jZh4SHnr6Di-BvWPp4%2Bg%40mail.gmail.com.