005
23.09.2004, 08:48 Uhr
ao
(Operator)
|
Zitat von Guybrush Threepwood: |
Wäre es in dem Beispiel mit den ints nicht egal ob man delete oder delete[] verwendet? Soweit ich weiß ruft doch delete[] "nur" die einzelnen Destrukoren auf, oder?
|
C++: |
int * p = new int [10]; // Array mit 10 Eintraegen anlegen
delete p; // Destruktor wird auf *p (d.h. auf p[0]) angewendet; das ist nicht die ganze Arbeit.
delete [] p; // Destruktor wird auf alle Array-Eintraege angewendet.
|
Der Unterschied ist, dass bei delete nur das erste Element regulär zerstört wird, bei delete [] alle Elemente.
Bei so einfachen Datentypen wie int, die einen trivialen Destruktor haben, spielt das keine Rolle. Aber wenn man z.B. sowas hier hat, ist es schon wichtiger:
C++: |
/* Eine Klasse, die Heapspeicher anfordert, so dass es wichtig ist, dass jede Instanz per Destruktor zerlegt wird, weil man sonst Speicher verliert. */
class CKlasseMitDynamischemSpeicher { private: char * m_pcMemory; public: CKlasseMitDynamischemSpeicher () { m_pcMemory = new char [1024]; } ~CKlasseMitDynamischemSpeicher () { delete [] m_pcMemory; } };
int main (void) { /* Instanzen erzeugen */ CKlasseMitDynamischemSpeicher * pkmds = new CKlasseMitDynamischemSpeicher [10];
/* ..... */
/* *ALLE* Instanzen wieder zerlegen */ delete [] pkmds; return 0; }
|
|