|
let me explain with an example:
BYTE* pbyte1 = new BYTE();
delete [] pbyte1;
The second line is suppsed to be just :
delete pbyte1;
So herez my question:
is there anything wrong with using the '[]' alongside teh delete operator even though the dynamically created variable is not of array type?
|
|
|
|
|
by using delete[] you are able to delete the memory occupied by the complete array.
in addition you can also assign a NULL to pByte1 . Clear to prevent using invalid memory reference.
Its the best way.
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
-- modified at 7:14 Tuesday 13th June, 2006
|
|
|
|
|
delete [] calls the constructer for each object of the array.
here you have created only one object of the BYTE.
so prefer second one.
Knock out 't' from can't,
You can if you think you can
|
|
|
|
|
When you use [] you are deleting the array.
and using the just delete pbyte you are deleting the pointer
and dont forget to set the pinter to NULL
Cheers
"Peace of mind through Technology"
-- modified at 7:14 Tuesday 13th June, 2006
|
|
|
|
|
namaskaaram wrote: BYTE* pbyte1 = new BYTE();
delete [] pbyte1;
IMHO, i better use Auto_ptr to deal with these problem!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
thanx everybody for that quick reply!...
but the question i have asked still remains unanswered!
is there any problem(like mem leak, or unexpected error)when i use 'delete []' for an object that is not created as array?????
|
|
|
|
|
See my post for the thread.
delete x ; //works for a single object
delete[] x; // deletes the complete array
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
dude!!!!!
u havent read my question! ;o)
i havent asked which to use.
My question is :whether there is a prob when 'delete []' is used to non-array type objects??
please do read the question !!!!
|
|
|
|
|
namaskaaram wrote: My question is :whether there is a prob when 'delete []' is used to non-array type objects??
Do you got any problem while using delete [] ??? if so what is the problem??
Knock out 't' from can't,
You can if you think you can
|
|
|
|
|
well just want to know if its handled by the delete operator !!!..
just inquisitive!
|
|
|
|
|
a class’ destructor, doesn’t know what the array’s size is;
(Initially delete had two arguments also.)
it only knew that its sole argument is a pointer to an array. Furthermore, a programmer might mistakenly pass the wrong size of the array to delete[]. C++ creators realized this and decided to eliminate the size argument. However, they have kept the distinction between delete and delete[].
So when you use delete[] to delete the single object using delete[] p only one object gets destroyed so no problems with that else if p is an array the whole array gets destroyed.
Does this answer your question now?
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
finally! ...hehe..just kidding!
nice answer bro!....
cheerz!
|
|
|
|
|
Quick answer: yes you'll have problems. new and new[] are not doing the same thing and if you mismatch that with delete and delete[], you'll be in troubles.
Cédric Moonen
Software developer
Charting control
|
|
|
|
|
r u sure cedric?..coz i have got a contradictory answer from an above post! ...hmm...
actually i did debug!....didnt find any probz1...but i just aint quite sure if itz ok or not!....
hmmm..
-- modified at 7:43 Tuesday 13th June, 2006
|
|
|
|
|
hi Cedric,
Can you just brief me on what problem would be there if I use delete[] to delete a single object?
I just read that using the delete[] method is the best way to delete an object as it deletes the memory associated with the array or the object completely
Thanks anyways I got the answer in Viorel's post
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
-- modified at 7:50 Tuesday 13th June, 2006
|
|
|
|
|
Because delete[] expects the number of items in your array to be just before the address of the first element. This value is not present when you use new. Thus, you will have some problems because you first try to read the number of items where you shouldn't.
Cédric Moonen
Software developer
Charting control
|
|
|
|
|
_AnShUmAn_ wrote: delete x ; //works for a single object
delete[] x; // deletes the complete array
He's already indicated he knows the difference. Read his original question again.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
and you guess what,
you didn't follow what the rest of the posts were for ?
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
When delete [] is called, the system organizes a loop according to the number of allocated items. Within this loop, the system calls the destructor, if any. The number of iterations is got from internal values made by new operator.
We cannot rely on the idea that the new operator, used in non-array manner, stores all of internal values needed by delete [] . It depends on implementations. For instance, in my tests (VS 2003), the delete [] statement fails if is executed for a single object allocated with new , and that object has a virtual destructor.
In case of objects with no destructor, like BYTE , the system does not need to known the number of iterations, therefore the delete [] acts like delete .
I think delete [] must be only used with arrays. Even if in some implementations the internal information allows using of delete [] for non-array objects, where delete is expected, it will be slower, because of the loop actually executed a single time.
|
|
|
|
|
Hi All,
I need to design a dialog box which has 2 sections. the left section is a tree control and right section displays various controls.Based on the user's selection in the tree control, I need to display different controls(like property pages...)in the right section.I have created separate dialogs for each of the selections and I need to embed this template onto the main dialog upon user's selection.Please let me know how to achieve this.
Thanks in advance
Raghu
|
|
|
|
|
Raghunandan wrote: need to design a dialog box which has 2 sections. the left section is a tree control and right section displays various controls.Based on the user's selection in the tree control, I need to display different controls(like property pages...)in the right section.I have created separate dialogs for each of the selections and I need to embed this template onto the main dialog upon user's selection.Please let me know how to achieve this.
Make the other dialogs as child and use the following code to create the dialogs in main Dialog.
CDialog *dlg=new CDialog()<br />
dlg->Create(Dialog ID);<br />
dlg->ShowWindow(SW_SHOW);
Use MoveWindow to set the dialog at appropriate position. or set the dialog co-ordinates.
Knock out 't' from can't,
You can if you think you can
|
|
|
|
|
You can use SetWindowPos and put the dialogs in modeless form.
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Set the Style property of Dialogs as child .
Now do as follows in your implementation file :
CDialog *dlg= new CChildDialog();
dlg->SetWindowPos(...);
dlg->ShowWindow(SW_SHOW);
Cheers
"Peace of mind through Technology"
|
|
|
|
|
the problem with these solutions are that the child dialog get closed upon pressing escape or enter when the focus in any of the controls
Raghu
|
|
|
|
|
See Here[^] maybe it is some helpful to you
you need to override OnOk and OnCancel
whitesky
|
|
|
|