deprecated delete and manual memory management

Daniel Gibson metalcaedes at gmail.com
Tue Apr 26 12:26:40 PDT 2011


Am 26.04.2011 20:23, schrieb Steven Schveighoffer:
> On Tue, 26 Apr 2011 14:14:11 -0400, Benjamin Thaut
> <code at benjamin-thaut.de> wrote:
> 
>> Am 26.04.2011 19:59, schrieb Steven Schveighoffer:
>>> On Tue, 26 Apr 2011 13:36:37 -0400, Benjamin Thaut
>>> <code at benjamin-thaut.de> wrote:
>>>
>>>> I've been reading through various delete topics in the past hour, but
>>>> couldn't find any statement on how manual memory management would
>>>> look, if the delete operator is deprecated. Something like the
>>>> following seems really odd:
>>>>
>>>> class foo {
>>>> public new(size_t sz){ //language support
>>>> return malloc(sz);
>>>> }
>>>>
>>>> public void Delete(){ // no language support ??
>>>> this.__dtor();
>>>> free(this);
>>>> }
>>>> }
>>>>
>>>> auto fooInst = new foo(); //language support
>>>> fooInst.Delete(); //no language support ??
>>>
>>> IIUC, the custom allocator will be deprecated as well.
>>>
>>> What I think you need to use instead is emplace (a phobos function, not
>>> sure where it is), clear, and GC.free.
>>>
>>> Andrei hinted at a not-yet-written drop-in replacement for delete, but
>>> I'm not sure how that looks.
>>>
>>> -Steve
>>
>> I don't want to use the GC at all, and clear() seems inefficent, since
>> it reaintializes the object. This is unneccsary since I just want to
>> throw it away anyway.
> 
> This is no longer the case for classes.  It actually runs the same
> function that delete runs (rt_finalize).  Though, I'm not sure it's in
> 2.052...
> 
>> emplace only works for structs, it does not work for classes.
> 
> I have not used it, but I'm under the impression from Andrei that it is
> to replace scope classes, so I would guess it has to work for them.
> 

It *does* work for classes (as of dmd 2.052).

>> Could someone please write a small example how manual memory
>> management would look without new / delete?
> 
> I think that is a good idea.
> 

Not a tutorial, just a simple example using C malloc/free:
http://pastebin.com/HSBrk5kA

Cheers,
- Daniel


More information about the Digitalmars-d mailing list