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.

Reply via email to