new und delete
-
hola leute
folgender code:
ne_struct *neu = (ne_struct*) new char[120]; .... delete neu; // (1)
wird mit (1) der speicher richtig freigegeben oder muss ich delete[] verwenden ?. wie siehts damit aus, wenn ne_struct normalerweise eigendlich nur 20 Bytes groß is ?
Meep Meep
-
Das ist C++ Vergewaltigung!
ne_struct *neu = new ne_struct; delete neu;
(in deinem Beispiel müstst du delete[] verwenden)
-
wenn du "neu" auf dem char[]-Speicherplatz ansiedeln willst, dann kannst du replacement new verwenden:
char*c= new char[120]; ne_struct*neu= new (c) ne_struct; //.. neu->~ne_struct(); //expliziter Destrukor-Aufruf //.. delete [] c;
ansonsten kann du auch operator new und operator delete überschreiben (das geht auch nur für ne_struct)
-
Shady schrieb:
wenn du "neu" auf dem char[]-Speicherplatz ansiedeln willst, dann kannst du replacement new verwenden: [...]
es heißt placement new
-
stimmt, hast recht
-
destruktor gibts da in der strukt leider keinen. es handelt sich da bei mir um die WAVEFORMATEX struct. je nach verwendeten codec kommen da noch felder dazu, deshalb muss ich waerend der laufzeit gucken wie groß die WAVEFORMATEX wird und dann muß ich den speicher reservieren.
mit delete[] stimmts dann (auch wenns ner vergewaltigung nahe kommt)?
was passiert eigendlich wenn ich nur
"delete die_struct;" aufrufe ? wird dann nur ein teil des speichers wieder freigegeben ??Meep Meep
-
Du kannst den Destruktor-Aufruf weglassen oder du lässt ihn drin und er macht eben gar nix
-
Meep Meep schrieb:
destruktor gibts da in der strukt leider keinen.
wetten doch?
-
Na und, ist doch ein POD. Wozu den wirkungslosen Dtor aufrufen?
-
Wenn die Typinformationen eh unwichtig sind, warum nicht malloc/free aus <cstdlib>? Da würde ich mich jedenfalls sicherer fühlen: Was zum Freigeben nehmen?, Alignmentprobleme?, Zurückcasten vor dem Freigeben? etc...
-
oder einfach operator new() und operator delete() ... funktioniert genauso wie malloc/free, ist aber irgendwie C++iger