Lebenszeit Variable von einer Struktur
-
Hi,
ich hab eine Klasse, die Klasse hat ein Methode und eine Struktur, in der Methode wird dann eine Variable von der Struktur erzeugt (
structname varname
), wie lang lebt dann diese Variable?
Solange bis ich die Methode aufrufe?
Danke Gruß
-
class Foo { struct Bar { int baz; }; public: Bar bar; void bas() { Bar another_bar; } // <- another_bar stirbt. }; int main() { Foo foo; foo.bas(); } // <- foo und damit foo.bar sterben.
-
Hier nochmal die Frage mit Code:
class foo { struct s_eins { int a; }Name_eins; struct s_zwei { int b; }; int methode (void) { s_zwei Name_zwei; Name_zwei.b=random(); Name_eins.a=random(); return 0; } int run (void) { methode(); //So und was ist jetzt hier ? //ist a und b noch am leben oder nicht? //kann ich auf die vars hier zugreifen? methode(); //hier müssten die vars wieder neue werte erhalten haben richtig? } }
-
class foo { struct s_eins { int a; }Name_eins; struct s_zwei { int b; }; int methode (void) { s_zwei Name_zwei; Name_zwei.b=random(); Name_eins.a=random(); return 0; }
^dort stirbt die Variable
int run (void) { methode(); //So und was ist jetzt hier ? //ist a und b noch am leben oder nicht? //kann ich auf die vars hier zugreifen?
nö
methode(); //hier müssten die vars wieder neue werte erhalten haben richtig? } }
nö.
Außerhalb der Methode existiert Name_zwei und damit auch Name_zwei.b nicht.
-
So müsste es an sich gehen ... ungetestet:
class foo { struct s_eins { int a; }Name_eins; // globale Variablen sollte man vermeiden struct s_zwei { int b; }; int methode (s_zwei& Name_zwei) { //s_zwei Name_zwei; Name_zwei.b=random(); Name_eins.a=random(); return 0; } int run (void) { s_zwei Name_zwei_lokal; methode(Name_zwei_lokal); // hier kannst du jetzt auf die lokale variable Name_zwei_lokal zugreifen // Name_eins ist ja eh global verfügbar methode(Name_zwei_lokal); // hier haben die Variablen Name_eins und Name_zwei_lokal neue Werte } // beim verlassen der Funktion run() "stirbt" Name_zwei_lokal
-
ReferenzenRocken schrieb:
...
struct s_eins { int a; }Name_eins; // globale Variablen sollte man vermeiden
Da ist nix global.
Name_eins
ist ein Member der Klassefoo
.
Ist das mit der lokalen Klassestruct s_eins
Absicht? Ansonsten, warum nicht direktint a;
?ReferenzenRocken schrieb:
// Name_eins ist ja eh global verfügbar methode(Name_zwei_lokal); // hier haben die Variablen Name_eins und Name_zwei_lokal neue Werte } // beim verlassen der Funktion run() "stirbt" Name_zwei_lokal
Noch ist gar nichts verfügbar, denn es wurde noch kein Objekt von
foo
erstellt.
Immerhin vom Prinzip her richtig: solange dieses Objekt lebt, lebt auch dessen MemberName_eins
und damit wiederum dessen Member a. UndName_zwei(lokal)
lebt nur innerhalb vonmethode()
(Post 3&4) bzw.run()
(Post 5)PS @Daram1: bau einfach mal in die ganzen structs/Klassen Constructoren und Destructoren ein und lass dir ausgeben, wann sie aufgerufen werden.