Sending an immutable object to a thread

rsw0x via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jul 22 13:26:28 PDT 2015


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.


More information about the Digitalmars-d-learn mailing list