Gültigkeit von Objekten, die mit new angelegt wurden
-
Hallo!
ich hatte vor ungefähr so etwas zu machen:
irgendeinTyp * Zeiger; void funktion(){ Zeiger = new irgendeinTyp; } funktion(); *Zeiger == ??????Das neu erstellte objekt ist ja nur innerhalb von funktion() gültig.
Wie schaffe ich es, dass es auch außerhalb erhalten bleibt?
Vielen Dank für Tipps
-
Es ist auch außerhalb gültig, da es nicht auf dem Stack liegt (da mit new erstellt).
-
Ok in meinem fall liegt es an etwas anderem.
Danke!
-
theanzelm schrieb:
Ok in meinem fall liegt es an etwas anderem.
Danke!Aber unabhängig davon deutet der Codeausschnitt ein paar Dinge an die zumindestens von dir beachtet werden sollten:
a) Möglichst keine globalen Variablen verwenden.
b) Zeiger immer mit 0 initialisieren, sofern du ihnen nicht direkt etwas gültiges zuweist.
c) Daran denken, das Speicher der mit new erzeugt wird auch wieder freigegeben (delete) werden muss.
d) Deine Funktion sollte vorher prüfen ob der Zeiger !=0 ist, und dann (je nach Anwendungsfall) entweder keine Allozierung mehr vornehmen oder vorher den Speicher freigeben.
e) Wenn du nach einem delete nochmal auf den Zeiger zugreifen kannst, diesen nach dem Delete auch auf 0 setzen...Grundsätzlich: Lokale Variablen werden zerstört, wobei es sich nur auf die Variable bezieht:
void foo1() { int *a = new int(4); } // <-- hier wird die Variable zerstört, nicht aber der allozierte // Speicherbereich freigegeben int* foo2() { int *a = new int(4); // ... return a; } // <-- hier wird die Variable wieder zerstört, aber die Adresse auf den // Speicherbereich zurückgegeben (dennoch unsauber, aber das ist anderes // Thema, später dazu mehr (*) void foo3(int*& a) { if(!a) a = new int(4); // <-- hier wird der übergebene Zeiger modifiziert... (*) }* Grundsätzlich ist es immer problematisch wenn Speicherallozierung und -freigabe in unterschiedlicher Verantwortung liegt.
cu André