unterschied zwischen new und static
-
Hallöchen
Also mir kam grad follgende frage in den sinn:
Wenn ich eine Funktuion aufrufe werden nach beendigung der Funktion wieder alle in der Fubnktion erzeugten Variablen gelöscht und die Inhalte gehen verloren.
Es gibt aber ja 2 Möglichkeiten dies zu umgehen.
- mit new (oder malloc() unter C) einen speicherbereich auf dem Heap anlegen.
dieser wird nach beendigung der Funktion nicht gelöscht (erst mit delete bzw. free()).
- die Variable die ich behalten möchte als "Static" zu definieren.Aber wo genau ist nun der Unterschied? geht es einfach darum die vorteile des Pointers nutzen zu können, oder ist static "schlechterer programmierstiel"?
-
Static wird 1x definiert - es ist quasi eine globale Variable, die nur eine Funktion lesen kann. NEW kannst du mehrere Male anlegen wodurch jedes Mal Speicher verloren geht (wenn man nicht löscht). Das nennt man Memleacks...
-
irgend wie kann man das nicht ganz vergleichen static und new. Wenn solltest du aber new benutzen, da so deine Funktion sicherer zu benutzen ist, da du keine Probleme mit Threads oä. bekommst.
[ Dieser Beitrag wurde am 18.05.2003 um 17:01 Uhr von kingruedi editiert. ]
-
Static Vars nimmt man i.a. wenn bei wiederholtem Aufruf einer Funktion die ('lokale') Variable den Inhalt vom vorherigen Aufruf kennen muss. Die Initialisierung erfolgt nur beim ersten Aufruf.
Diese Vars leben solange wie das Programm! - wie globale, sind aber nur lokal ansprechbar!
-
hi,
mit new erzeugte objekte sind auch ganz sinnvoll wenn sie objekte einer klasse sind und du vor hast sie in mehreren funktionen zu benutzen.
ein beispiel waere ein ball dessen farbe du in einer funktion paintBall() veraendern willst und in einer funktion moveBall() bewegen willst.das ist zwar ein schlechtes beispiel, aber die sache an sich ist sehr sinnvoll.
Gruss,
tuxipuxi.
-
Also kann ich mir generell alle "statics" sparen und durch new(bzw. unter C halt malloc()) ersetzen. das einsetzen von static ist also nur "kosmetischer" natur bei einzelnen Funktionen?!
Generell seh ich das jetzt so:
variable - pointer
static - new
unflexibel - sehr flexibelOder gibts da noch andere einsatzgebiete?
-
Original erstellt von THE_FreaK:
<snip> oder ist static "schlechterer programmierstiel"?Weiß ich nicht. Aber das ist schlechter Schreib[i]stil[/b].
-
Zum Beispiel Rekursionen:
Du rekursierst durch den Verzeichnisbaum der Festplatte, immer tiefer rein ...
Da ist fuer nen Zaehler, der die Tiefe bestimmt ne static Variable ideal. (Falls die Tiefe interessiert!) Laufend new/delete oder Parameteruebergabe bremsen nur.
Fuer grosse Datenmengen (Strukturen) nicht zu empfehlen - Speicherverschwendung.
-
unsigned GetNextInt() { static unsigned Zaehler = 0; return Zaehler++; }
Wie willst du diese Funktion denn mit new implementieren?
Etwa so: *lol*unsigned GetNextInt(unsigned*& LetzterZaehler, bool Letzter = false) { if(!LetzterZaehler) LetzterZaehler = new unsigned(0); if(Letzter) { unsigned Temp = *LetzterZaehler + 1; delete LetzterZaehler; LetzterZaehler = 0; return Temp; } else return (*LetzterZaehler)++; } /* ... */ { unsigned* LetzterZaehler; unsigned erstens = GetNextInt(LetzterZaehler); unsigned zweitens = GetNextInt(LetzterZaehler); unsigned drittens = GetNextInt(LetzterZaehler, true); }
[ Dieser Beitrag wurde am 18.05.2003 um 20:47 Uhr von cd9000 editiert. ]
-
Man kann nicht verallgemeinern, was besser ist und ein Vergleich von new und static macht IMHO einfach keinen Sinn. Da du static benutzen solltest, wenn du static brauchst. Du musst bei static eben nur mit den Seiteneffekten aufpassen und dir bewusst sein, wie du das einsetzt (vorallem wenn du Threads nutzt)