Programm stürzt nach korrekter Ausgabe ab.
-
@EinNutzer0 du musst aber im Standard Konstruktor nicht unbedingt mit new schon neuen Speicher anfordern. Wenn du den Standard Konstruktor von std::string oder vector aufrufst, schreibt der ja auch nicht per default irgendwas da rein.
-
@Wade1234 sagte in Programm stürzt nach korrekter Ausgabe ab.:
du könntest ja theoretisch auch vor dem anfordern des speichers überprüfen, ob überhaupt schonmal speicher angefordert wurde (nullptr) und diesen speicher dann evtl. freigeben.
Nix prüfen.
delete nullptr
ist wohldefiniert. Aber Du hast dann den selben Käse wenn das nächstenew
wirft.
-
die ausnahme kann man ja abfangen, oder?
-
@Wade1234 Schon, aber die alten Daten sind weg. Ich zumindest bin (hoffentlich nicht alleine) der Meinung daß assignment operators das Objekt in seinem ursprünglichen Zustand belassen sollen wenn sie ihre Aufgabe nicht erfüllen können.
-
@Swordfish man könnte ja erst versuchen, den neuen speicher anzufordern und dann den alten löschen, oder?
-
@Wade1234 Ja. Und genau das macht man mit Copy-'n-Swap.
-
@Wade1234 sagte in Programm stürzt nach korrekter Ausgabe ab.:
@Swordfish man könnte ja erst versuchen, den neuen speicher anzufordern und dann den alten löschen, oder?
Dann läuft man theoretisch vor das Problem, dass für die neue Anforderung genug Speicher da ist, aber nicht für die neue UND die alte, deren Speicher dann erst später freigegeben werden kann.
-
Dieser Beitrag wurde gelöscht!
-
@Belli sagte in Programm stürzt nach korrekter Ausgabe ab.:
@Wade1234 sagte in Programm stürzt nach korrekter Ausgabe ab.:
@Swordfish man könnte ja erst versuchen, den neuen speicher anzufordern und dann den alten löschen, oder?
Dann läuft man theoretisch vor das Problem, dass für die neue Anforderung genug Speicher da ist, aber nicht für die neue UND die alte, deren Speicher dann erst später freigegeben werden kann.
Das ist halt einer der Preise für strong exception safety.
-
@Belli sagte in Programm stürzt nach korrekter Ausgabe ab.:
Dann läuft man theoretisch vor das Problem, dass für die neue Anforderung genug Speicher da ist, aber nicht für die neue UND die alte, deren Speicher dann erst später freigegeben werden kann.
Korrekt. Und?