Rainer Schuetze wrote:

On 28.06.2013 13:37, Michel Fortin wrote:
> Le 28-juin-2013 à 4:55, Rainer Schuetze <r.sagita...@gmx.de> a écrit
> :
>
>> What happens if the class also implements interfaces? A reference
>> of the interface type must do reference counting as well. So the
>> interface must also define AddRef and Release. This is currently
>> true for COM-interfaces derived from IUnknown, but not for other
>> interfaces.
>
>
> I would assume if an object of a reference-counted class cannot be
> cast to its base non-reference-counted class that it'd be the same
> for casting to non-reference-counted interfaces.
>

Yes, that is probably the way to go. But that makes using protocols like COM difficult in safe mode. We have already talked Walter into not linking reference counting to AddRef and Release, but if it is implemented with other methods, these cannot be added to the already existing COM interfaces. Passing or getting interface pointers to/from external code being unsafe sounds ok, but passing around these interface references in D code would be unsafe as well.

Adding aliases or non-virtual wrappers to the interface declaration to forward reference counting to AddRef/Release might help but could also introduce ambiguities in a class that derives both from a reference counted base class and an interface like this.

Reply via email to