2013-02-18 9 views
8

Dodaję potomków TObject do TStringList, na przykład przez wywołanie AddObject. Chciałbym, aby zostały uwolnione, gdy uwolnię obiekt listy. Czy jest jakiś sposób, aby to osiągnąć?Czy TStringList może automatycznie zwolnić obiekty dołączone do swoich przedmiotów?

+4

To duplikat http://stackoverflow.com/questions/9148659/how-to-free-objects-in-stringlist-in-delphi-7, ale to pytanie jest słabo napisane. To właśnie powstrzymuje mnie od głosowania, aby zamknąć jako dupe. –

+1

@iMan Usunąłem kod z pytania. W pytaniu tym nie ma sensu, ponieważ prawie odpowiada na pytanie. Jeśli odpowiesz na własne pytanie, najlepiej zachować część odpowiedzi w odpowiedzi. W każdym razie szczegóły implementacji nie są potrzebne, wystarczy odnieść się do dokumentacji, tak jak zrobiłem w mojej edycji do twojej odpowiedzi. –

+0

@DavidHeffernan Właściwie znalazłem odpowiedź, kiedy pisałem to pytanie, i myślę, że napisanie go tutaj uratowałoby kogoś jeszcze kilka minut. –

Odpowiedz

14

Właściwość z TStringList powinna być ustawiona na True, aby lista mogła uwalniać swoje obiekty podczas niszczenia. Można to osiągnąć, dzwoniąc pod numer constructor overload that receives the OwnsObjects parameter lub jawnie ustawiając właściwość po utworzeniu. Zaleca się ustawienie OwnsObjects jako części konstrukcji obiektu.

documentation opisuje właściwość tak:

OwnsObjects właściwość określa, czy wykaz ten ciąg jest właścicielem przechowywanych przedmiotów, czy nie. Jeśli właściwość OwnsObjects jest ustawiona na wartość True, destruktor Destroy zwolni pamięć przydzieloną dla tych obiektów.

+0

czy istnieje pole dla TStrings ? – none

+1

@none, jeśli masz na myśli, jeśli właściwość 'OwnsObjects' jest dostępna w klasie' TStrings', to odpowiedź brzmi "nie", ponieważ mechanizm ten został zaimplementowany w 'TStringList', a nie w jego przodku, klasie' TStrings'. – TLama

Powiązane problemy