Frage zu Pointer mit new
-
Hallo,
ich hab grad folgenden Code vor mir:
#include <iostream> #include "Klasse.h" #include "Klasse2.h" using namespace std; int main(int argc, char* argv[]) { Klasse *x = new Klasse; cout << x << endl; x->Methode(); delete x; Klasse *y; cout << y << endl; y->Methode(); return 0; }Ok, also bei der ersten Klasse lege ich das objekt mit new an, beim zweiten ohne. Beim ersten muss man zusätzlich noch ein Delete machen ansonsten habe ich ein speicherloch -> auch klar!

Aber was ist bitte der Unterschied zwischen den beiden Arten ein Objekt anzulegen? was soll das new zusätzlich noch bringen? Beim zweiten habe ich kein speicherloch, habe ich überprüft!
lg
-
buzz_lightzyear schrieb:
Beim zweiten habe ich kein speicherloch, habe ich überprüft!
Beim zweiten hast du gar kein Objekt, nur einen uninitialisierten Zeiger.
-
Klasse kla; Klasse *y = &kla;Der Unterschied ist, dass du mit new Speicher auf dem Heap reservierst und diesen überall verweden kannst. in der zweiten Variante legst du das Objekt auf dem Stack an. Wird der Scope verlassen, so wird das Objekt auch zerstört. Dies ist bei new nicht der Fall, denn dort musst du mittels delete sagen, wann du es nichtmehr brauchst und freigeben willst.
-
#include <iostream> #include "Klasse.h" #include "Klasse2.h" using namespace std; int main(int argc, char* argv[]) { Klasse *x = new Klasse; cout << x << endl; x->Methode(); delete x; Klasse y; cout << y << endl; y.Methode(); return 0; }Unterschiede:
- bei 1) legst du dein Objekt auf dem Heap an (dynamische Speicherplatzanforderung), und bei 2) auf dem Stack.
- bei 1) musst du bestimmten, wann der Speicher wieder freigegeben wird, bei 2) ist es an den Gültigkeitsbereich der Variable gekoppelt.
- Du verwendest 1) wenn du eine große Menge an Speicherplatz benötigst, da der Stack nicht so groß ist und irgendwann erschöpft ist.
- Falls du aber mal viel Speicherplatz benötigst, solltest du nicht new verwenden, sondern sog. Container.
mfg dweb
-
danke für eure ausführlichen Antworten!
lg
buzz