lame question
Steven Schveighoffer
schveiguy at yahoo.com
Mon Apr 18 07:03:10 PDT 2011
On Mon, 18 Apr 2011 09:44:38 -0400, lenochware <lenochware at gmail.com>
wrote:
> == Quote from Steven Schveighoffer (schveiguy at yahoo.com)'s article
>> On Mon, 18 Apr 2011 04:31:26 -0400, %u <lenochware at gmail.com> wrote:
>> > Is it necessary free memory allocated for member of structure, like in
>> > C? I
>> > suppose not (we have gc). Example:
>> >
>> > struct BITMAP {
>> > (...)
>> > ubyte[] pixels;
>> > }
>> >
>> > BITMAP* bitmap = new BITMAP;
>> > bitmap.pixels = new ubyte[100*100];
>> > (...)
>> >
>> > // delete bitmap.pixels; //not necessary?
>> >
>> > delete bitmap;
>> It is not necessary, because pixels will be collected by the GC sometime
>> in the future. It will *not* free pixel's data by calling delete on the
>> BITMAP pointer.
>> Just a note, you may be tempted to use a destructor do effect the above
>> (as is done in C++ commonly), but this is a very big mistake.
>
> So what is "correct" way to manage structures like BITMAP? Don't bother
> with
> freeing memory at all?
In most cases yes. Freeing memory manually is dangerous (the compiler
cannot verify that there are no other references to that memory), and
should only be used when optimizing performance, or to workaround runtime
deficiencies like false pointers.
In essence, you should avoid freeing memory unless you know what you are
doing. It's very possible you do know that it's OK.
-Steve
More information about the Digitalmars-d
mailing list