Should destructors be able to tell who called them?
Steven Schveighoffer
schveiguy at yahoo.com
Tue Aug 10 13:53:50 PDT 2010
On Tue, 10 Aug 2010 16:03:42 -0400, Lutger <lutger.blijdestijn at gmail.com>
wrote:
> Steven Schveighoffer wrote:
>
>> On Tue, 10 Aug 2010 15:08:30 -0400, Lutger
>> <lutger.blijdestijn at gmail.com>
>> wrote:
>>
>>> Steven Schveighoffer wrote:
>>> ...
>>>> This would make destructors a lot more useful. Thoughts?
>>>>
>>>> -Steve
>>>
>>> My first thought was that they are actually two separate functions
>>> distinguished
>>> by a boolean, then Michel also mentioned the SafeD argument.
>>>
>>> atm I think it is better to let go of the destructor entirely for
>>> anything else
>>> than the GC collecting non-gc owned data as we now have. (the unsafe
>>> version,
>>> not compilable in SafeD). Rather provide a standard interface to
>>> implement and
>>> base deterministic release of resources on that. A much more simple
>>> version of
>>> IDisposable. clear() can call this one and leave ~this alone.
>>
>> Hm... something I just thought of that makes this bad, destructors are
>> special in that they automatically call base destructors. You can't do
>> that with a simple function.
>>
>> But it could be done the way you say (with the caveat that you have to
>> manually call the base method). I think clear should call ~this() in
>> addition to the dispose method because you don't want to have to
>> duplicate
>> code.
>>
>> -Steve
>
> clear could check if the base classes implement the interface and act on
> that.
> It already does the same for destructors.
Checking if a class implements an interface is not as trivial as accessing
a member of the classinfo. It's a linear search through the interfaces.
Plus, I don't know quite how it would work, I'm not sure its doable.
BTW, I assumed that the most derived destructor simply called the base
destructor implicitly, I didn't realize this was handled via the runtime,
that seems like a low-hanging fruit opportunity for performance
improvement...
-Steve
More information about the Digitalmars-d
mailing list