On 6/28/2013 7:14 AM, Michel Fortin wrote:
> Le 25-juin-2013 à 17:00, Walter Bright a écrit :
>
>> If a class contains the following methods, in either itself or a base class,
it is
>> an RC class:
>>
>>
>> T AddRef();
>> T Release();
>>
>> An RC class is like a regular D class with these additional semantics:
>>
>> 1. In @safe code, casting (implicit or explicit) to a base class that does
not
>> have both AddRef() and Release() is an error.
> I'm just realizing that this means @safe code cannot call any member function
of the non-reference-counted base class. This would require an implicit
conversion of "this" to the base class.
That's right.
>
> @system code could, but it'd be extremely uneasy doing such calls unless I am
the one in charge of that code and can make sure the base function will never
store the (unretained) pointer somewhere it shouldn't now and in the future. An
misstep here and you get memory corruption. Seriously, I don't think @system
code should allow implicit conversions to the base class, it should be explicit.
It's a worthy point.
>
> I am starting to doubt there is any value in inheriting the base
ref-counted-class from another class.
>