2013-02-18 3 views
8

Ich füge einige TObject Nachkommen zu einem TStringList, zum Beispiel durch den Aufruf AddObject. Ich möchte, dass sie freigegeben werden, wenn ich das Listenobjekt freigebe. Gibt es einen Weg, dies zu erreichen?Kann die TStringList Objekte, die an ihre Objekte angehängt sind, automatisch freigeben?

+4

Es ist ein Duplikat von http://stackoverflow.com/questions/9148659/how-to-free-objects-in-stringlist-in-delphi-7, aber diese Frage ist schlecht geschrieben. Das hält mich davon ab, so düpiert zu schließen. –

+1

@iMan Ich habe den Code aus der Frage entfernt. Es ist nicht viel Sinn, das in der Frage zu erwähnen, da es die Frage ziemlich gut beantwortet. Wenn Sie Ihre eigene Frage beantworten, ist es am besten, den Antwortteil in der Antwort zu behalten. In jedem Fall werden die Implementierungsdetails nicht benötigt, es genügt, auf die Dokumentation zu verweisen, wie ich es in meiner Bearbeitung zu Ihrer Antwort getan habe. –

+0

@DavidHeffernan Eigentlich fand ich die Antwort, als ich die Frage schrieb, und dachte, vielleicht würde es hier schreiben würde jemand anderen ein paar Minuten speichern –

Antwort

14

Die OwnsObjects Eigenschaft von TStringList sollte auf True gesetzt werden, damit die Liste ihre Objekte freigibt, wenn sie zerstört werden. Dies kann entweder durch Aufruf der constructor overload that receives the OwnsObjects parameter oder durch explizites Festlegen der Eigenschaft nach der Erstellung erreicht werden. Es ist vorzuziehen, OwnsObjects als Teil der Konstruktion des Objekts zu setzen.

Die documentation beschreibt die Eigenschaft wie folgt aus:

Die OwnsObjects Eigenschaft gibt an, ob die String-Liste der gespeicherten Objekte oder nicht besitzt. Wenn die Eigenschaft OwnsObjects auf True gesetzt ist, wird der Destroy-Destruktor den für diese Objekte reservierten Speicher freigeben.

+0

gibt es ein Feld für TStrings ? – none

+1

@none, wenn Sie gemeint haben, wenn die OwnsObjects-Eigenschaft in der TStrings-Klasse verfügbar ist, lautet die Antwort nein, da dieser Mechanismus in TStringList implementiert wurde, nicht in seiner Vorgängerklasse TStrings. – TLama

Verwandte Themen