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.

Reply via email to