Unterschied zw. new (bzw delete) und den Konstruktor (bzw Destruktor)



  • mantiz schrieb:

    Wie ist das, wenn ich innerhalb einer Klasse per new ein neues Objekt als Member erzeuge? Dann muss ich das per delete wieder freigeben, richtig?

    richtig

    mantiz schrieb:

    Wenn ich das nicht als Zeiger und per new mache, dann wird der Speicher automatisch freigegeben, richtig?

    richtig

    mantiz schrieb:

    Wie ist das, wenn ich z.B. in main per new ein neues Objekt erzeuge, dieses aber nicht wieder per delete freigebe? Ist der Speicher dann verloren, solange, wie mein Programm läuft, oder solange, bis ich reboote?

    kommt evtl. aufs betriebssystem an, du kannst aber davon ausgehen das der speicher wieder frei ist sobald dein programm beendet wird.



  • OK, alles klar. Danke. 🙂



  • borg schrieb:

    kommt evtl. aufs betriebssystem an, du kannst aber davon ausgehen das der speicher wieder frei ist sobald dein programm beendet wird.

    Wer garantiert dir das?

    Verlasse dich niemals darauf. Zu jedem new solltest du einen passenden delete aufruf haben. Oder SmartPointer verwenden



  • evilissimo schrieb:

    Verlasse dich niemals darauf. Zu jedem new solltest du einen passenden delete aufruf haben. Oder SmartPointer verwenden

    natürlich. er hat aber gefragt ob der speicher freigegeben wird wenn man das programm beendet. und das wird er unter jedem mir bekanntem betriebssystem, ich hab ja extra dabeigeschrieben das es nicht garantiert wird.



  • Interessant ist ja das noch gar keinem mein Fehler(Syntaxfehler) aufgefallen ist...

    hrhr. na wer findet ihn ? (EDIT: bzw Sie ? )

    MfG



  • delete B;



  • ZuK schrieb:

    delete B;

    Nein, das hatte ich ja noch angemerkt...

    evilissimo schrieb:

    // Edit bei den beiden Pointer Varianten muss jeweils delete aufrufen

    Ich sagt auch extra Syntaxfehler!
    //Edit: Hmm Vielleicht ist es eher ein Semantikfehler, kein Syntaxfehler aber ich kann jetzt auch nicht sagen wo da der unterschied ist...



  • };



  • ZuK schrieb:

    };

    Nicht raten. Nach denken und überlegen.

    *g*

    MfG



  • @evilissimo
    Spontan sehe ich nur, dass

    myclass * b = new myclass(a);

    wohl besser

    myclass * b = new myclass(*a);
    

    heißen sollte, aber was bitte soll dieses Rätselraten hier? Es wäre sinnvoller, wenn du deinen Beitrag einfach entsprechend korrigieren würdest (oder selbiges in einem neuen Beitrag tun würdest). Wir sind hier ja nicht bei "Such den Fehler".



  • Ich würde mal sagen beide antworten von mir sind fehler in deinem beispiel. ob syntax, oder semantik sei mal dahingestellt. wenn da noch etwas falsch ist dann kann ich nur sagen "ganz schün viele fehler für so ein kurzes beispiel". 😉
    Kurt



  • HumeSikkins schrieb:

    @evilissimo
    Spontan sehe ich nur, dass

    myclass * b = new myclass(a);

    wohl besser

    myclass * b = new myclass(*a);
    

    heißen sollte, aber was bitte soll dieses Rätselraten hier? Es wäre sinnvoller, wenn du deinen Beitrag einfach entsprechend korrigieren würdest (oder selbiges in einem neuen Beitrag tun würdest). Wir sind hier ja nicht bei "Such den Fehler".

    ok.



  • ZuK schrieb:

    Ich würde mal sagen beide antworten von mir sind fehler in deinem beispiel. ob syntax, oder semantik sei mal dahingestellt.

    Weder noch waren Fehler.



  • 1. Posting : Du willst also sagen delete class anstatt delete member ist ok. ?
    2. Posting : Klassen deklaration ohne bschliessendes ; is ok ?
    Welchen compiler verwendest du ?
    Kurt



  • ZuK schrieb:

    1. Posting : Du willst also sagen delete class anstatt delete member ist ok. ?
    2. Posting : Klassen deklaration ohne bschliessendes ; is ok ?
    Welchen compiler verwendest du ?
    Kurt

    Ich bin nicht mantiz 🙄



  • Das tut mir jetzt aber wirklich leid. Hab nicht auf den absender geachtet.
    Kurt.



  • Das ";" hab' ich vergessen, das gehört da natürlich hin, keine Frage. 🙂


Anmelden zum Antworten