Referenz Variablemember in klasse??



  • Folgende Klasse:

    class XXX{
    
    DATA &m_Data;
    
      XXX(DATA &tmp) : m_Data(tmp){
       .....
      }
     ~XXX(){
      //Auflösung vom globaöen test?
      }
    
    }
    

    Wenn ich jetzt test erzeuge , und referenz von test in klasse habe , udn klasse zerstöre, wird dann nicht auch in der klasse das test zerstört?

    DATA test;
    
    XXX *p= new XXX(test);
    
    delete p;
    


  • Wenn du nicht manuell (im Dtor) das angehängte Objekt zerlegst, wird das niemand für dich machen - ergo überlebt 'test' gefahrlos den delete-Aufruf.
    (der Destruktor zerstört nur die Member der Klasse selber - und eine Referenz zu zerstören beeinflusst nicht das referenzierte Objekt)



  • BorisDieKlinge schrieb:

    Wenn ich jetzt test erzeuge , und referenz von test in klasse habe , udn klasse zerstöre, wird dann nicht auch in der klasse das test zerstört?

    Wenn jemand ein Telefonbuch verbrennt, in dem dein Name steht, stirbst du dann?



  • naja wenn DATA nen destruktor hat, dann wird dieser ja automatisch im destruktor von XXX aufgerufen oder nich? ist ja kein zeiger auf Data, sondern das Objekt selber unter einem anderen namen....



  • BorisDieKlinge schrieb:

    naja wenn DATA nen destruktor hat, dann wird dieser ja automatisch im destruktor von XXX aufgerufen oder nich?

    Nein, wird er nicht - m_Data ist ja kein OBjekt, sondern nur eine Referenz (Alias) auf ein Objekt, das irgendwo anders untergebracht ist. Und der Destruktor löscht nur diese Referenz und nicht das Objekt dahinter.



  • Das referenzierte objekt bleibt bestehen, genauso wie in folgendem Beispiel:

    Foo x;
    
    { //neuer scope
      Foo& y = x; //y ist Referenz auf x
      y.dosomething();
    } //scope verlassen -> y wird zerstoert (die REFERENZ)
    
    x.dosomething(); //das Objekt selbst lebt aber noch
    

    Man kann in gewissem Rahmen Referenzen als eine Art pointer sehen, die
    - const sind (nicht auf andere Objekte umgebogen werden koennen)
    - nur auf bestehende Objekte verweisen koennen und nicht NULL sein koennen
    - keie pointer-syntax sondern objektsyntax haben
    - nichts mit new und delete zu tun haben 😉



  • ahhh... ok 🙂 das wollte ich wissen;) thx


Anmelden zum Antworten