Eliminate class allocators and deallocators?
Christopher Wright
dhasenan at gmail.com
Wed Oct 7 03:18:44 PDT 2009
Andrei Alexandrescu wrote:
> Christopher Wright wrote:
>> What exactly is your suggestion?
>>
>> It seems that you mean that:
>> delete obj;
>>
>> should call a destructor but not call delete() or notify the GC that
>> the memory is free.
>
> That is correct. In particular, an object remains usable after delete.
>
>> You're saying that there is a problem, but you're not telling us
>> what's wrong. Why the hell do you want to destroy an object without
>> recycling its memory? Why does the inability to do so cause a problem?
>
> The matter has been discussed quite a bit around here and in other
> places. I'm not having as much time as I'd want to explain things. In
> short, destroying without freeing memory avoids dangling references and
> preserves memory safety without impacting on other resources.
Memory safety, sure, but you're deleting the object. It is no longer
valid. You need to add a flag to the object indicating it's invalid, and
everything that uses it needs to check that flag. Instead of a probable
segfault in the current system, you'll get strange errors.
It sounds like a complicated way of supporting a rare use case. Why not
use a library solution? Make an IDisposable interface with methods "void
dispose()" and "bool disposed()"?
If you don't have enough time to explain the reasoning, could you post a
link to a more detailed explanation?
More information about the Digitalmars-d
mailing list