Konstruktor/Destruktor (bei dynamischer Speicherreservierung)

Gast #3479901
Lesenswert?
• ▲
▼
Hallo ich habe eine Frage zu einem Konstruktor bzw. zum Destruktor.

Kessel ist mein Class.


Reicht es  wenn ich den Destruktor so wie unten schreibe oder muss ich 
das anderst programmieren da ich ja im Konstruktor den Speicher für 
"Name"  dynamisch anlege

•
1
Kessel(char*Name,int X, int Y, double Inhalt, double Temperatur)
2
        { 
3
        Kessel::Name = new char[strlen(Name)+1];                                    // Name wird in neu reservierten Speicherbreich kopiert...
4
        strcpy(Kessel::Name, Name);   
5
        }
6
       
7
       
8
~Kessel ()

grüße Trudi
Gast #3479952
Lesenswert?
• ▲
▼
In diesem Fall musst Du den Speicher - spätestens im Dekonstruktor - 
selbst wieder freigeben, sonst entsteht ein Speicherleck. D.h., der 
Speicher würde erst beim Beenden des Prozesses freigegeben. Allerdings 
muss man noch weitere Dinge beachten - insbesondere beim Kopieren von 
Objekten des Typs "Kessel".

Generell: Verwende besser die C++-String-Klassen. Und wenn man die 
Grundlagen des manuellen Speicherhandlings verstanden hat, sollte man 
sich die Smart-Pointer-Klassen ansehen.

BTW: Einen leeren Dekonstruktor müsstest Du nicht explizit 
hinschreiben, er wird automatisch vom Compiler generiert.
#3479985
Lesenswert?
• ▲
▼
trudi schrieb:

> das anderst programmieren da ich ja im Konstruktor den Speicher für
> "Name"  dynamisch anlege

Grundregel:
Für alles, was du im Programm mittels 'new' anlegst, bist auch du 
verantwortlich, dass es ein zugehöriges 'delete' gibt. Und zwar nur ein 
einziges pro Pointer-Wert!

PS: Achtung.
Du verwendest ein 'new []'. Also musst du auch das zugehörige 'delete 
[]' benutzen.
Gast #3480414
Lesenswert?
• ▲
▼
Und sehr wichtig: Die "Rule of Three" beachten:
Wenn du einen Destruktor, einen Kopierkonstruktor oder einen 
Zuweisungsoperator brauchst, dann mußt du dich immer um alle drei 
kümmern.
Aber wie manni schon schrieb, wäre hier std::string das Mittel der Wahl, 
um sich gar nicht erst manuell um Speicher kümmern zu müssen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren