Darf ein Objekt sich selbst löschen?



  • Also geht sowas:

    class Bombe
    {
       ...
       void zuende()
       {
           machbumm();
           delete this;
           ...
       }
    };
    


  • Ja. Das ist natürlich nicht ganz unproblematisch, aber prinzipiell gibts da keine Probleme.



  • Der Compiler schluckt das Wahrscheinlich.

    Jetzt kommts drauf an, ob du Bombe dynamisch mit new oder statisch erzeugst. Wennst du's statisch erzeugst:

    int main(int argc, char **argv)
    { Bombe b;
    
      b.zuende();
    }
    

    Wird das programm abstürzen, oder undefiniertes Verhalten zeigen.

    Bei dynamischer erzeugung

    int main(int argc, char **argv)
    { Bombe *b=new Bombe;
    
      b->zuende();
    }
    

    Wird das Object einfach gelöscht.



  • Du darfst aber nachdem Aufruf von delete auf keine der Variablen mehr zugreifen,
    da diese ja nicht mehr länger existieren.



  • @SirLant Auf die Klassenvariablen nicht, aber immernoch auf die lokalen Variablen der Funktion.

    Also falls was gebraucht wird: immer erst in lokalen Funktions Vars speichern

    @Jürgonaut lässt sich aber mit try/catch abfangen, oder?



  • Auf die Klassenvariablen nicht, aber immernoch auf die lokalen Variablen der Funktion.

    Aber es geht nur um die Variablen dieser einen Instanz. Sonst können so viele objekte rumschwirren, wie sie wollen und man kann auch alle zugreifen, wie man will, aber das hat mit dem Thema überhauptnichts zu tun.

    lässt sich aber mit try/catch abfangen, oder?

    Nope, undefiniertes Verhalten lässt sich durch gar nichts abfangen. Undefiniert heißt genau das: Es ist auch erlaubt, das das Programm die Dönerbude um die Ecke in die Luft jagt.


Anmelden zum Antworten