An Issue I Wish To Raise Awareness On

Atila Neves via Digitalmars-d digitalmars-d at puremagic.com
Fri Jul 21 01:37:51 PDT 2017


On Thursday, 20 July 2017 at 21:20:46 UTC, Jonathan M Davis wrote:
> On Thursday, July 20, 2017 07:40:35 Dominikus Dittes Scherkl 
> via Digitalmars-d wrote:
>> On Wednesday, 19 July 2017 at 22:35:43 UTC, Jonathan M Davis
>>
>> wrote:
>> > The issue isn't the object being destroyed. It's what it 
>> > refers to via its member variables. For instance, what if an 
>> > object were to remove itself from a shared list when it's 
>> > destroyed (e.g. because it's an observer in the observer 
>> > pattern). The object has a reference to the list, but it 
>> > doesn't own it.
>>
>> So, even a thread-local object that has references to a shared
>> list
>> has to handle those as shared, even in its non-shared 
>> destructor.
>> I can't follow your argument.
>
> You can't just strip off shared. To do so defeats the purpose 
> of shared. If you have something like
>
> struct S
> {
>      shared List<Foo> _list;
>
>      ~this()
>      {
>         ...
>      }
> }

This is fine. What dmd does now is strip shared off of the `this` 
pointer, not the member variables. There's only a problem if the 
sharedness of the member variable(s) depends on sharedness of the 
enclosing object.

> then inside of the destructor, _list is not treated as shared,

It is.

Atila


More information about the Digitalmars-d mailing list