Fehlercodes inC++ Bitte um Hilfestellung


  • Mod

    rustyoldguy schrieb:

    Du hast den Destruktor vergessen!

    Erklär mal den Sinn deines leeren Destruktors. Gibt keinen, oder?



  • hustbaer schrieb:

    Ich zeig dir wie du das rausfindest, anhand eines Beispiels. Den Rest machst du dann selbst.
    [...]

    Macht mich immer glücklich, wenn ich solche Posts sehe. Echt jetzt 👍



  • Hi!

    Der Destruktor ist das Gegenstück zum Konstruktor. Er hat die Aufgabe, die
    Initialisierung des Konstruktors zurück zu nehmen, welche mit der
    automatischen Auflösung des Speicherbereichs nicht erledigt sind.
    Er wird also GEGEBENENFALLS
    automatisch aufgerufen, zwar nicht beim Beginn, sondern am Ende der
    "Lebenszeit" eines Objekts, etwa beim Rücksprung aus einer Funktion, die
    ein Objekt als lokale Variable definiert.
    Sein Zweck sind quasi ausschließlich Aufräumarbeiten, wie die
    Freigabe von dynamisch belegten Speicherbereichen.dadurch, gegebenenfalls
    etwa für das schließen oder entsperren von Dateien.

    Wenn ein Datenelement selbst ein Objekt einer Klasse ist, wird auch
    dessen Destruktor aufgerufen. Wenn z.B. ein mit new angelegte Objekt
    (dynamisch belegter Speicher) mit delete wieder gelöscht wird,
    beim Verlassen eines Funktionsblocks, in dem Lokale Objekte
    definiert wurden.

    Ob ein Destruktor für eine Klasse definiert werden muß oder nicht,
    hängt von den jeweiligen Anforederungen ab. Für Objekte welche über ihren
    Konstruktor oder eine andere Methode selbständig dynamischen Speicherplatz
    belegen, ist ein Destruktor fur Freigabe dieser Bereiche eine unbedingte
    Vorraussetzung.
    Destruktoren sind nicht überladbar und können keine Parameter
    übernehmen und besitz auch keinen Ergebnistyp.

    Der Destruktor sollte aber trotzdem, auch wenn er leer ist, drin stehen,
    viele Compiler geben eine Fehlermeldung raus, wenn er fehlt. Außerdem
    spart man sich bei späteren Änderungen Tipparbeit.



  • rustyoldguy schrieb:

    Der Destruktor sollte aber trotzdem, auch wenn er leer ist, drin stehen,

    Wozu?!?!

    viele Compiler geben eine Fehlermeldung raus, wenn er fehlt.

    Dann ist der Compiler kaputt.



  • HarteWare schrieb:

    hustbaer schrieb:

    Ich zeig dir wie du das rausfindest, anhand eines Beispiels. Den Rest machst du dann selbst.
    [...]

    Macht mich immer glücklich, wenn ich solche Posts sehe. Echt jetzt 👍

    Ich hab keine Ahnung ob das Sarkasmus/Zynismus sein soll oder nicht. Echt jetzt.

    ps: Nach Lesen einiger deiner anderen Beitrage nehme ich an du meinst es Ernst. OK. Dann danke 🙂 War mir nur auf Grund der Formulierung grad nicht sicher.



  • rustyoldguy schrieb:

    Der Destruktor sollte aber trotzdem, auch wenn er leer ist, drin stehen,

    Ich sage das ist kompletter Unfug. Kannst du diese deine Meinung denn auch irgendwie begründen?

    rustyoldguy schrieb:

    viele Compiler geben eine Fehlermeldung raus, wenn er fehlt.

    Das ist einfach nur falsch.

    rustyoldguy schrieb:

    Außerdem spart man sich bei späteren Änderungen Tipparbeit.

    WTF?



  • hustbaer schrieb:

    rustyoldguy schrieb:

    Der Destruktor sollte aber trotzdem, auch wenn er leer ist, drin stehen,

    Ich sage das ist kompletter Unfug. Kannst du diese deine Meinung denn auch irgendwie begründen?

    Das ist nicht nur Unfug, sondern sogar gefährlicher Unfug...


  • Mod

    dot schrieb:

    hustbaer schrieb:

    rustyoldguy schrieb:

    Der Destruktor sollte aber trotzdem, auch wenn er leer ist, drin stehen,

    Ich sage das ist kompletter Unfug. Kannst du diese deine Meinung denn auch irgendwie begründen?

    Das ist nicht nur Unfug, sondern sogar gefährlicher Unfug...

    Nein, der Unfug ist nicht gefährlich, sondern VC++.



  • Unfug, der auf einem der am weitesten verbreiteten Compiler zu unnötig ineffizientem Code führt, würde ich als gefährlichen Unfug einstufen...



  • Ums nochmal explizit zu sagen, der Compiler generiert implizit einen default destructor, wenn der user keinen definiert. Oder so ähnlich.

    @hustbaer, ja war ernst gemeint, da gibts son Sprichwort, mit gib nem Mann nen Fisch und ernähre ihn für einen Tag, bring ihm bei zu Fischen und ernähre ihn sein ganzes Leben lang, oder so ähnlich. Das lässt sich auf die selbstständige Fehlerbehebung auch irgendwie übertragen.


Anmelden zum Antworten