Unterschied zw. new (bzw delete) und den Konstruktor (bzw Destruktor)
-
Hi,
ich häng' mich hier mal ran, ich hoffe, Du hast nichts dagegen.
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?
Also sowas:class B; class A { A() { myb = new B(); } ~A() { delete myb; } myb* B; }
Wenn ich das nicht als Zeiger und per new mache, dann wird der Speicher automatisch freigegeben, richtig?
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?
-
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, dassmyclass * 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, dassmyclass * 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 ?
KurtIch 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.