Objekte werden gelöscht
-
Dein Kopierkonstruktor kopiert nichts.
-
Ok Fehler gefunden aber verstehen tu ich's nicht..wär echt cool für ne Erklärung. Wenn ich den Kopierkonstruktor rausnehme funktioniert's..
-
@ycbm wenn du den Kopierkonstruktor raus nimmst, erstellt der Compiler einen (Google mal nach Rule of 0/3/5). Wenn du selbst einen schreibst, muss der auch kopieren.
-
I will danke
-
Kurze Fragen:
Eine Flache Kopie, ist eine Kopie, die gemacht wurde, ohne einen copyconstructor zu programmieren. Alle Variablen der Kopie zeigen auf die Adresse des Originals? Oder ist das nur bei Zeigern der Fall?Tiefe Kopie wird selbstständig programmiert um neue Speicher zuzuweisen? Geht das dort nur mit new?
-
flache kopie bedeutet eigentlich, dass du nur eine referenz auf das ursprüngliche objekt erhälst, und tiefe kopie bedeutet, dass ein neues objekt mit gleichem inhalt erstellt wird.
-
@Wade1234 sagte in Objekte werden gelöscht:
flache kopie bedeutet eigentlich, dass du nur eine referenz auf das ursprüngliche objekt erhälst, und tiefe kopie bedeutet, dass ein neues objekt mit gleichem inhalt erstellt wird.
Nein.
-
@ycbm sagte in Objekte werden gelöscht:
Kurze Fragen:
Eine Flache Kopie, ist eine Kopie, die gemacht wurde, ohne einen copyconstructor zu programmieren. Alle Variablen der Kopie zeigen auf die Adresse des Originals? Oder ist das nur bei Zeigern der Fall?Nur bei Zeigern. Da wird dann halt der Zeiger kopiert. Hinterher zeigen beide auf das gleiche Objekt.
Tiefe Kopie wird selbstständig programmiert um neue Speicher zuzuweisen? Geht das dort nur mit new?
Der erstellte Konstruktor kopiert alle Member richtig. Nur wenn du Pointer Member hast, wird halt der Pointer kopiert, wenn das zugrunde liegenden Objekt kopiert werden soll, muss man das selbst machen (das ist dann aber meistens der Fall).
new
brauchst du dafür nicht. Für Anfänger (und auch Fortgeschrittenen) gilt eigentlich, dass mannew
nie braucht. Die Verwendung vonnew
ist eine absolute Ausnahme.
-
Weshalb stellt sich jeder so arg gegen new/delete? Es erscheint so nativ und handlich.
-
@ycbm weil auch Profis damit sehr schnell Fehler machen. Außerdem gibt es genug Klassen die Ressourcen Verwaltung bereit stellen und weg kapseln die durch getestet sind und korrekt arbeiten. Das kann man selbst nur schlechter machen.
-
Weitere Stichwort dazu: RAII (s. insb. "Zweites Beispiel" -> wenn innerhalb der Funktion eine Exception geworfen wird, entsteht ein Memory Leak [und dies ist ein sehr einfaches Beispiel, in komplexeren Programmen ist dies viel wahrscheinlicher!]).
-
@ycbm sagte in Objekte werden gelöscht:
Woher ich das habe..naja wildem rumprobieren, wenn's dann zufällig klappt kann ich die Logik rekonstruieren
Das ist so ziemlich der bescheuertste Weg C++ zu lernen
-
@ycbm sagte in Objekte werden gelöscht:
Weshalb stellt sich jeder so arg gegen new/delete? Es erscheint so nativ und handlich.
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-newdelete