Destructor fehlt?
-
Hi.
Ich habe ein TFrame und möchte in der Klasse eine Variable definieren, welche in mit new dann anlegen möchte und auffüllen. Jedoch hat TFrame keine Close() Methode, worüber ich normalerweise die Variablen delete.
private: // Anwender-Deklarationen TStringList *StringList; public: // Anwender-Deklarationen __fastcall TFrame1(TComponent* Owner); // Eigener Destructor __fastcall ~TFrame1() { delete StringList; }Ist das so in Ordnung? Dumme Frage die sicherlich mit einem klaren "JA" beantwortet wird, aber ich würds trotzdem gern hören.

-
Hallo
JA

Das ist der richtige und standard-konforme Weg in OOP-C++.
Zu beachten wäre noch das du auch die Initialisierungsliste des Konbstruktors benutzen solltest um StringListe auch mit einer neuen Instanz zu belegen oder einfach auf 0 zu setzen. Denn sonst kann es ja vorkommen das der Destruktor ausgeführt werden könnte, ohne das nach dem Konstruktor etwas sinnvolles zugewiesen wurde. Und dann knallts beim delete.bis bald
akari
-
Und dann brauchst du noch die dreisten drei (
Wie hiess die Regel schon wieder? )
Wenn du einen nicht trivialen Destruktor mit delete drinne hast, solltest du Copyconstructor und operator= auch selbst schreiben.
http://tutorial.schornboeck.net/bigthree.htm
-
Hallo
Stimmt grunsätzlich, allerdings ist es eh sehr ungewöhnlich bei VCL-Instanzen den op== oder den Kopierkonstruktor zu benutzen. Vermutlich wird das schon durch die zugruendeliegende Klasse TFrame nicht unterstützt, da spielt dann die Reservierung in der oberen Klasse auch keine Rolle mehr.
bis bald
akari
-
Stimmt macht kein Sinn..und ich dacht, ich könnt mal was schlaues sagen
