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/CAOyqgcUDKr4BvRWdbtQKYqf8FZjcE4w5DBbDp-5DJcNG_apaiQ%40mail.gmail.com.