statische objekte in funktionen



  • Hallo,
    Wann wird ihr Speicher freigegeben?

    aObject& test()
    {
      static aObject Result = aObject(...);
      return Result;
    }
    
    int main()
    {
      aObject X = test();
      ....
    
    }
    

  • Mod

    Wenn das Programm beendet wird.



  • Hallo,

    nach dem Ende von main. Dann werden auch die Destructoren aufgerufen.

    mfg Martin



  • SeppJ schrieb:

    Wenn das Programm beendet wird.

    bedeutet es, das dann langsam der Speicher zugemüllt wird, wenn man die Funktion oft verwendet?

    for( int I=0; I < 100 ; ++I )
    {
      aObject X = test(...);
      X->DoSth();
    }
    


  • static aObject Result;

    Result wird einmal (beim ersten Aufruf von test()) konstruiert und beim Verlassen von main() zerstört.
    In der Schleife wird das statische Objekt jeweils einmal kopiert (nicht referenziert), diese Kopie wird jeweils beim Schleifenende zerstört.



  • statiker schrieb:

    SeppJ schrieb:

    Wenn das Programm beendet wird.

    bedeutet es, das dann langsam der Speicher zugemüllt wird, wenn man die Funktion oft verwendet?

    for( int I=0; I < 100 ; ++I )
    {
      aObject X = test(...);
      X->DoSth();
    }
    

    Moment. Du hast hier zwei Objekte:

    Einmal das statische Objekt in test() und einmal das lokale Objekt on der Forschleife. Nur das statische Objekt wird nach dem Ende von main zerstört. Das lokale Objekt wird schon am Ende der for-schleife zerstört.

    mfg Martin



  • statiker schrieb:

    bedeutet es, das dann langsam der Speicher zugemüllt wird, wenn man die Funktion oft verwendet?

    for( int I=0; I < 100 ; ++I )
    {
      aObject X = test(...);
      X->DoSth();
    }
    

    Nein. Das Objekt X ist lokal und wird am Ende jedes Schleifendurchgangs (beim } ) zerstört.



  • [quote]bedeutet es, das dann langsam der Speicher zugemüllt wird, wenn man die Funktion oft verwendet?[quote]

    Nein, das wird nicht passieren, egal wie oft du die Funktion aufrufst, die darin enthaltene Deklaration samit Initialisierung wird nur einmal durchgeführt.
    folgende funktion mal asl etwas intuitiveres Beispiel
    func()
    {
    static int i = 0;
    i++;
    }

    rufst du func 5 mal auf, hat i den Wert 5 und nicht 1, weil static int i = 0 nur einmal durchgeführt wird.


Anmelden zum Antworten