delete op question. do I need to cast?

L

lallous

Hello

Consider this:

// allocate a buffer, and cast to MYSTRUCT
MYSTRUCT *p = (MYSTRUCT *) new char[sizeof(MYSTRUCT) + 100];

// free the buffer

// 1. can I free directly as:
delete [] p;

// 2. or as:
delete p;

// 3. or better, to cast to char* and delete, as:
delete [] (char *)p;

Which is correct (if any)?

The struct doesn't have any dtor or ctor() it is just a plain C struct.
 
J

John Harrison

lallous said:
Hello

Consider this:

// allocate a buffer, and cast to MYSTRUCT
MYSTRUCT *p = (MYSTRUCT *) new char[sizeof(MYSTRUCT) + 100];

// free the buffer

// 1. can I free directly as:
delete [] p;

// 2. or as:
delete p;

// 3. or better, to cast to char* and delete, as:
delete [] (char *)p;

Which is correct (if any)?

3 is correct.
The struct doesn't have any dtor or ctor() it is just a plain C struct.

That makes no difference as far as correctness goes.

john
 
T

Timothy Madden

lallous said:
Hello

Consider this:

// allocate a buffer, and cast to MYSTRUCT
MYSTRUCT *p = (MYSTRUCT *) new char[sizeof(MYSTRUCT) + 100];

// free the buffer

// 1. can I free directly as:
delete [] p;

// 2. or as:
delete p;

// 3. or better, to cast to char* and delete, as:
delete [] (char *)p;

Which is correct (if any)?

Of course
delete [] (char *)p;
is correct.
Use typecasts only when necessary. They bypass the type-checking rules of
the language.
Also if you have some dlls take care to delete from the same module where
you allocated the data with new.

Timothy Madden
Romania
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,432
Messages
2,571,682
Members
48,796
Latest member
Greg L.

Latest Threads

Top