L
Andrey schrieb:
"klassen"? w-wwie "Klassen"? wartet mal leutz, hab ich das prinzip etwa völlig falsch verstanden? Hast du da "klasseninstanz" gemeint, oder bin ich da grad auf etwas gestoßen, was ich nur zu verstehen _glaubte_ ?
Nene, stimmt schon
Objekte oder Instanzen erzeugst Du mit new auf dem Heap oder eben auf dem Stack.
Was ich da vorhatte: eine klasse zu deklarieren, die als statische variable einen pointer auf eine instanz dieser klasse hat. Wo die instanz liegt (ob aufm heap oder sonstwo) sollte eigentlich egal sein.
Und da liegt der Hase im Pfeffer: Wo die Instanz liegt, ist natürlich egal. Aber wie lange sie lebt, eben nicht. Ein mit myclass() erzeugtes Objekt (wie in Deinem Versuch) ist temporär und lebt nur über die Dauer des Ausdrucks in dem es verwendet wird. Ein mit myclass objekt() erzeugtes Objekt lebt nur bis zur dazugehörigen schliessenden geschweiften Klammer (genauer: bis zum Ende des Scopes). Ein auf dem Heap erzeugtes Objekt lebt bis Du es wieder löscht.
Und irgendwie verstehe ich nicht: warum muss diese instanz unbedingt auf dem heap erzeugt werden? Warum funktioniert es nicht, wenn ich diese instanz im normalen speicher erzeuge, und ihre adresse in den pointer speichere?
1. Muss sie nicht. Eine statische Variable wie lolz gezeigt hat geht auch. Diese lebt dann vermutlich irgendwo im Datenbereich des Programms.
2. Siehe oben, das Objekt lebt eine Zeile tiefer schon nicht mehr. Deine Adresse zeigt auf ein Objekt das es nicht mehr gibt.
zum memoryleak: nun ja, was man auf dem heap erzeugt, kann man auch wieder entfernen, solang man weis wo es ist, das ist kein problem...
Ja, nur dass Du auch dran denken musst
Die static-Variante räumt der Compiler automatisch zum Programmende ab.