Konstruktor-Frage



  • Hi, ich behande im Moment das Thema Klassen (Destruktoren).
    Meine Frage wäre: Wann muss man zwangsweise einen Destruktoren selber programmieren? Der standart-Destruktor zerstört doch fleißig alle Objekte oder?

    //EDIT, ich meinte Destruktoren ** sry



  • Zenter schrieb:

    Wann muss man zwangsweise einen Destruktoren selber programmieren?

    Naja, müssen tut man nie etwas. Manchmal sollte man etwas tun, manchmal nicht. Da gibt es eine Regel names rule of three .

    Zenter schrieb:

    Der stan****-Destruktor zerstört doch fleißig alle Objekte oder?

    Richtig. Diesbezüglich solltest du dir auch RAII anschauen.



  • Ich gehe mal davon aus, dass du den Destruktor meinst. Der Konstruktor zerstört eigentlich keine Objekte.

    class ok{
        int x;
        public:
        ok() {x=5;} //Konstruktor
        ~ok(){} //Destruktor
    };
    
    class evil
    {
        int *x;
      public:
      evil(){x=new int(5);}
      ~evil(){delete x;} //ohne delete Speicherleck
    };
    

    (Normalerweise sollte man aber immer Initialisierungslisten verwenden.)
    In diesem wunderbarem Beispiel siehst du, dass der Destruktor einmal selbst implementiert werden muss und einmal nicht. (Allerdings: Benutze NIE(fast) new und delete, RAII)

    In C++11 kannst du auch das schreiben:

    class aut
    {
      aut()=default;
      ~aut()=default;
    };
    

    Dann erzeugt der Compiler sie explizit selber.



  • Danke euch für die Erklärung und für die Tipps die ihr gegeben habt 🙂


Anmelden zum Antworten