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?
    

    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 Klasse foo .
    Ist das mit der lokalen Klasse struct s_eins Absicht? Ansonsten, warum nicht direkt int 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 Member Name_eins und damit wiederum dessen Member a. Und Name_zwei(lokal) lebt nur innerhalb von methode() (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.


Log in to reply