On Tue, 13 Jul 2010 21:36:02 +0300, Andrei Alexandrescu <[email protected]> wrote:

Not quite. New is different because it is a primitive - it can't be implemented as a function (well it could if it user placement new, but we're back to square one). In contrast, delete already knows the type of the object it's destroying and can call the destructor manually so it is easy to implement as a regular function.

Sorry, not following you here. Why can't new be implemented as a templated function which takes the type of the object to create as a template parameter? Isn't it just allocation, copying over T.init, then calling the constructor with whatever arguments the user passed?

But manual deletion has no business in the garbage collected heap.

Isn't that making the assumption that all D programs are garbage-collected?

That currently druntime provides it is an accident caused by thecurrent implementation; most GC's cannot provide efficient manual reclamation. And they shouldn't anyway.

Why not? And what if I don't use the GC (just the allocation/deallocation aspects of it)?

(There's a longer discussion underneath this concerning what memory really is and what GCs really are and do.)

I understand your points regarding leaving deallocation to happen on a GC run being more efficient than manually deallocating objects individually, but this doesn't cover all use-cases. Also, what if I need to deallocate a large block of memory right now? I'd be forced to use the more verbose and less safe "free" functions.

--
Best regards,
 Vladimir                            mailto:[email protected]

Reply via email to