Eliminate class allocators and deallocators?
Michel Fortin
michel.fortin at michelf.com
Wed Oct 7 08:36:00 PDT 2009
On 2009-10-07 08:46:06 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> said:
> You're right. It would be great to dispose of the delete keyword and
> define a member function and/or a free function that invokes the
> destructor and obliterates the object with its .init bits.
I guess I should have read this before posting mine. :-)
You're suggesting obiterating with the .init bits, but I believe this
is insufficient: you need to call a constructor if you want to be sure
object invariants holds. If you can't make the invariants hold, you're
in undefined behaviour territory.
> At any rate: deletion + memory reclamation must go. If you want to do
> manual memory management, malloc/free are yours. D's native GC heap is
> not the right place.
Well, yes you're entirely right saying that. But I fail to see how this
is linked to class allocators and deallocators. Class allocators and
deallocators are just a way to tell the runtime (including the GC) how
to allocate and deallocate a specific class of objects. There is no
need to manually call delete for the allocator and deallocator to be
useful.
The way it is currently, if you want objects of a certain class to be
allocated in one big object pool, you can encapsulate that detail in
the class so clients don't have to bother about it. I've done that in
C++ to speed up things without having to touch the rest of the code
base and it's quite handy.
At other times the client of the class that wants to manage memory, and
that should be allowed too, bypassing the class's allocator and
deallocator and calling directly the constructor and destructor.
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d
mailing list