Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Klassen freigeben
HenryHux - Di 01.02.11 19:01
Titel: Klassen freigeben
Hey, ich habe bis jetzt immer die Exception invalid Pointer bekommen, wenn ich den constructor so aufgerufen habe.
Delphi-Quelltext
1: 2: 3: 4: 5:
| destructor TReactions.free; begin AndereKlasse.Free; inherited free; end; |
Wenn ich anstatt inherited free inherited destroy aufrufe, kommt keine Exception.
Deshalb wollte ich mal fragen, wie ich denn am besten Klassen wieder freigebe.
Wähle ich dazu den destructor free oder destroy?
Und rufe ich inherited free oder destroy auf?
Wo liegt der Unterschied zwischen free und destroy?
Ich meine mal gelesen zu haben dass free destroy aufruft??
Lg
jaenicke - Di 01.02.11 20:29
Also:
Free ist eine Prozedur, die prüft, ob die Instanz bereits nil ist (also gar nicht oder nicht mehr existiert). Wenn nicht, wird der Destruktor aufgerufen. Der sollte grundsätzlich Destroy heißen. (Auch wenn man ihn theoretisch auch anders nennen kann. :puke:)
Dann schauen wir doch mal:
HenryHux hat folgendes geschrieben : |
Hey, ich habe bis jetzt immer die Exception invalid Pointer bekommen, wenn ich den constructor so aufgerufen habe.
Delphi-Quelltext 1:
| destructor TReactions.free; | |
Du deklarierst hier einen Destruktor, der genauso heißt wie die Prozedur Free. Wenn du jetzt das geerbte Free aufrufst, ruft das wiederum den Destruktor auf. Nur ist das bei dir dein Free. Das wird also selbst wieder aufgerufen. :nut:
Deshalb:
Erstens heißt ein Destruktor
immer Destroy (und der Konstruktor Create).
Zweitens sollte dieser nie direkt aufgerufen werden, sondern stattdessen Free (steht auch in der Hilfe).
Und drittens solltest du Free nicht überschreiben, es sei denn du weißt warum du das willst.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!