Lebenszeit von lokalen Objekten



  • Hallo,

    ich habe eine sehr dumme Frage, konnte aber im Internet im Grund nichts dazu finden.

    Wenn ich mein Objekt so erzeuge:

    void blabla() {
    
    MyClass myobject();
    myobject.doSth();
    }
    

    Wird es dann am Ende des Funktionsaufrufen freigegeben? Wenn nein, wann wird es denn frei gegeben?

    Danke für eure Zeit. (Ich kenne new und delete, kann das aber in dem Fall nicht benutzen)



  • Ja wird es. Am Ende jedes Blocks = {..} werden die inneren Objekte freigegeben:

    void lo()
    {
       Objekt o1;
    
       { //neuer innerer block
    
          Objekt o2;
    
       } //o2 gibts nicht mehr
    
    } //o1 gibts nicht mehr.
    


  • Ja, wird freigegeben.

    Allerdings solltest du entweder {} oder keine Klammern bei der Objekdefinition verwenden, da es sonst eine Funktionsdeklaration ist.


  • Mod

    Objekte leben innerhalb der Ebene geschweifter Klammern, in denen sie erzeugt wurden:

    {
      int a;
      // a gültig. b gibt es noch nicht.
      {
        int b;
        // a und b gültig
      }
      // a gültig. b nicht mehr gültig.
    }
    // a und b nicht mehr gültig.
    

    Wenn eine Funktion verlassen wird, werden auch die geschweiften Klammern verlassen, die sie einschließen.

    (Obige Darstellung ist etwas ungenau, aber dafür einfach zu verstehen. Sie scheitert bei solchen Dingen wie Variablen, die im Kopf einer for-Schleife definiert wurden; oder bei Funktionsparametern. Die genaue Definition des Lebensbereichs wäre ein bisschen komplizierter.)

    PS: Und noch wichtige Anmerkung: Obige Erklärung zur Gültigkeit von Namen beantwortet insofern die Frage, als dass Objekte automatisch erzeugt bzw. zerstört werden, wenn sie in ihren Gültigkeitsbereich eintreten bzw. diesen verlassen.


Log in to reply