verständnisfrage des new operators
-
Hallo,
ich versuche zu verstehen wo der Unterschied bei folgenden sachen ist :
class B { .. }; B::B(int a) { x = a; } //1 ruft die klasse auf B(10); //2 reserviert speicher new B(10);passiert hier bei beiden (1 u. 2) nicht das gleiche? bzw ist der Effekt der gleiche? Oder wird der new Operator bei sowas garnicht verwendet? Ich hoffe die Frage ist nicht zu doof ... aber ich würde es gerne verstehen was dort passiert
-
1 estellt ein kurzlebiges temporäres stack objekt
2 erstellt ein permanentes free store objekt das man selber aufräumen muss
-
Also der new- Operator reserviert dir Speicher in der Grösse des Types im Freispeicher. Den du aber auch wieder freigeben musst. (Was du hier schon mal nicht gemacht hast)
Aber ich verstehe nicht ganz, was deine Frage ist. Geht es dir um den ctor (Konstruktor) oder geht es dir um den new- Operator? Das sind 2 verschiedene Paar Schuhe.
-
nein es ging nicht um den ctor, ich wollte nur den Unterschied der beiden Methodenaufrufe wissen. Heisst das, dass der Operator new nur "eine Art" Objekt Initialisierung ist? Damit meine ich wäre new das gleiche wie
B obj1;nur das es man mit new dem ctor direkt Werte übergeben kann?
-
NEIN. Das ist es nicht!!!
class B { .. }; B::B(int a) { x = a; } int main () { B obj (2); //Erzeug ein Objekt des Typs B: Wird mit dem Ender des Gültigkeitsbereiches wieder zestört. (Hier also am Ende der main). B* pObj = new B (2); //Erzeug ein Objekt des Typs B im Freispeicher, wo du dich um die Lebensdauer kümmern musst. (Nebenbei der new Operator gibt einen Zeiger auf das Objekt zurück) delete pObj; // Hier wird das Objekt wieder freigegeben. return 0; }Du siehst, dass die Konstruktoren bei beiden Möglichkeiten angegeben werden können.
Du solltest dir die Kapitel zu new/delete nochmal durchlesen. Denn anscheinend hast du den Sinn nicht so ganz verstanden..

-
ja du hast recht ich muss mich auf jedenfall nochmal mit der Lebensdauer von Objekten befassen. Dem Sinn von new bin ich aber ein Stück näher gekommen

danke ...