Wichtig: Hab ich dann einen Destruktor/Konstruktor der nix macht?



  • Wenn ich in der .cpp File(die .cpp die zur .h gehört in der die Klasse steht) folgendes schreibe:

    Test::~Test()
    {
    }
    

    Ha ich dann einen Destruktor der nix macht, im Sinne von das Objekt wird nicht zerstört?
    Das Gleiche Hab ich auch beim Konstruktor geschrieben macht der dann auch nix?

    thx im Voraus
    mfg Digger 182



  • Hi der Konstrutkor und Dekonstruktor dient nur dazu dort ZUSÄTZLICHE Dinge zu erzeugen, löschen... Die Klasse wird natürlich korrekt gelöscht.
    Wobei du dazu mehr Code zeigen müsstest wie du die Klasse benutzt.

    Denn das sind unterschiede:

    Test *MeinTest = new Test; // Erzeugt
    delete Test; // Löschen
    
    {
    Test NeueKlasse; // Erzeugt
    }
    // Gelöscht...
    

    Gruß Patrick



  • Ich verwende ganz normale Variablen nchts dynamisches oder so also auch kein spez. Destruktor/Konstruktor mir gehts nur darum zu erfahren ob er überhaupt noch was macht wenn ich das schreib



  • Die Klasse wird aufjedenfall zerstört. Nur wenn du mit new usw... arbeitest musst du denn Speicher natürlich wieder freigeben. Der Konstruktor dient in erster Linie dazu Objekte zu initalisieren. Und der Dekonstruktor die initalisierten Objekte zu löschen, wenn nötig. Ansonsten musst du einfach mehr Code zeigen, denn ich verstehe dein Problem nicht.

    Gruß Patrick



  • Das mit new und delete ist mir klar ich wollte nur wissen ob das Objekt wieder zerstört wird. Ich verwende kein new oder delete demnach muss auch nicht zwingend ein eih´gener Destruktor/Konstruktor geschrieben werden, deswegen schreib ich es wie oben bin mir aber nicht sicher ob das Objekt wieder zerstört wird.

    Also: Wird es zerstört?



  • Ja wird es.



  • das wollte ich wissen Danke!



  • Digger182 schrieb:

    [...]mir gehts nur darum zu erfahren ob er überhaupt noch was macht wenn ich das schreib

    Der destruktor macht nichts, aber wie Dummie bereits geschrieben hat wird das Objekt zerstört. Der Destruktor zerstört nie das Objekt; er gibt nur zusätzlich angeforderten Speicher ( per new ) mittels delete wieder frei ( Natürlich kann man im Destruktor auch z.B. etwas ausgeben, aber normalerweise tut man das nicht )!



  • Oder anders ausgedrückt: Nicht der Destruktor zerstört das Objekt. Das Programm ruft den Destruktor auf, wenn (bzw. bevor) es das Objekt zerstören will.

    (und nachdem dein leerer Dtor-Rumpf abgearbeitet wurde, kommt noch einiges an Zusatzcode, mit dem Membervariablen und Basisklassen zerstört werden)



  • Hi,

    Digger182 schrieb:

    Wenn ich in der .cpp File(die .cpp die zur .h gehört in der die Klasse steht) folgendes schreibe:

    Test::~Test()
    {
    }
    

    ...

    ... dann hast Du überflüssige (und bestenfalls verwirrende) Tipparbeit geleistet. 😃

    Ich will nicht rüde erscheinen, sondern pointieren, ich habe das hier bei Einsteigern häufiger gesehen, dass sie als erstes mal leere DefaultCtoren und DToren schreiben, weil in irgendeinem Buch steht, dass Klassen immer einen CTor/Dtor-Paar haben müssten. Das stimmt zwar auch, aber man sollte gleich dazu schreiben, dass solche "trivialen C/Dtoren" automatisch vom Compiler erzeugt werden (ist im Std definiert - keine Compilersonderlocke !) und man C/DToren nur selbst zu schreiben braucht, wenn sie etwas Anderes tun sollen.
    (Auf das manuelle Aufrufen der Basisklassen-DefaultCtoren z.B. kommt dagegen sehr selten einer 😉 )

    Also wie hier schon gesagt: Wenn Du möchtest, dass beim Erzeugen/Zerstören eines Objektes noch etwas Besonderes erledigt wird, kannst Du das in einem CTor/DTor festlegen (einzige Ausnahme IIRC: Um eine Klasse als "ableitbar" zu kennzeichnen, sollte man ihr einen virtuellen DTor verpassen ... auch wenn das seine einzige Existenzberechtigung sein sollte).
    Ansonsten brauchst Du keinen und Das Erzeugen/Zerstören selbst kannst Du damit auch weder zur Laufzeit initiieren noch verhindern....

    Gruß,

    Simon2,



  • Digger182 schrieb:

    Ich verwende kein new oder delete demnach muss auch nicht zwingend ein eih´gener Destruktor/Konstruktor geschrieben werden, deswegen schreib ich es wie oben bin mir aber nicht sicher ob das Objekt wieder zerstört wird.
    Also: Wird es zerstört?

    Natürlich wird es zerstört.
    Wenn du kein new/delete verwendest, was machst du dann? Lokale Variablen? Die *müssen* zerstört werden, weil der Speicher automatisch freigegeben wird wenn die Funktion verlassen wird.

    Die einzige Möglichkeit die Lifetime von Objekten frei selbst zu bestimmen ist eben new/delete.


Anmelden zum Antworten