On Wednesday, 22 July 2015 at 17:17:17 UTC, Frank Pagliughi wrote:
On Wednesday, 22 July 2015 at 09:04:49 UTC, Marc Schütz wrote:

But as long as the original pointer is still on the stack, that one _will_ keep the object alive. It is only a problem if all pointers to a GC managed object are stored in places the GC isn't informed about.

Sorry, I have gotten confused. In Ali's example, the pointer to a class object (via the address-of '&' operator) actually points into the GC heap. It is *not* a pointer to a pointer, right?

My reading of the Garbage web doc page is that this pointer to memory in the GC heap is sufficient (by some magic) to keep the memory alive, in and of itself.

So the pointer, passed to the other thread is sufficient to keep the memory alive, even if the original reference disappears.

Or, to put it another way, getting threads out of the equation, is this safe?

  class MyThing { ... }

  MyThing* create_a_thing() {
    MyThing mt = new MyThing();
    do_something_with(mt);
    return &mt;
  }

  void main() {
    MyThing* pmt = create_a_thing();
    // ...
  }

The "thing" will remain alive for the duration of main() ??

Thanks

No.
this is actually returning an address of a temporary.

Reply via email to