DIP74: Reference Counted Class Objects

Volodymyr via Digitalmars-d digitalmars-d at puremagic.com
Wed Mar 4 01:27:22 PST 2015


On Tuesday, 3 March 2015 at 09:58:12 UTC, Andrei Alexandrescu 
wrote:
> On 3/3/15 12:53 AM, Volodymyr wrote:
>> On Thursday, 26 February 2015 at 21:50:56 UTC, Andrei 
>> Alexandrescu wrote:
>>> http://wiki.dlang.org/DIP74 got to reviewable form. Please 
>>> destroy and
>>> discuss.
>>>
>>> Thanks,
>>>
>>> Andrei
>>
>> With opAddRef/opRelease class does respondible for its 
>> dealocation and
>> its own payload so breaks SOLID's single responsibility 
>> principle.
>
> Correct. That's a tactical matter that can be addressed e.g. 
> with mixin templates.
>
>> As
>> for me better design will be to do it closer to C++'s 
>> shared_ptr.
>> e.g:
>>
>> // maybe with @arc
>> struct RefCounter(T)
>> {
>> void opAddRef();
>> void opRelease();
>> ref T obj;
>> ref size_t count;
>> }
>> }
>>
>> RefCounter!Widged myRefToWidget;
>>
>> RefCounter with default ctor/dtor. opAddRef and opRelease is 
>> for
>> compiler optimtimisation and elimination of redunadant ref 
>> counter
>> increment/decrement.
>
> We couldn't make that work with safety.
>
>
> Andrei

Why couldn't? Let's for all @return (this) functions make 
wrappers that rerturn RefCounter!MemberType(member, 
ownerCounterPtr), and same thing for public fields

The wrapper nedded only for realy owned resources (but not simple 
gc's refs).


More information about the Digitalmars-d mailing list