2013-02-18 43 views
8

我正在添加一些TObject後代到TStringList,例如通過調用AddObject。當我釋放列表對象時,我希望它們被釋放。有什麼辦法可以做到這一點?TStringList是否可以自動釋放附加到其項目的對象?

+4

這是一個http://stackoverflow.com/questions/9148659/how-to-free-objects-in-stringlist-in-delphi-7的副本,但這個問題寫得不好。這就是阻止我投票結束的愚蠢行爲。 – 2013-02-18 12:59:22

+1

@iMan我從問題中刪除了代碼。這個問題沒有太多的意義,因爲它幾乎可以回答這個問題。如果您回答自己的問題,最好將答案保留在答案中。在任何情況下,不需要實現細節,只需參考文檔即可,正如我在編輯答案時所做的那樣。 – 2013-02-18 13:12:57

+0

@DavidHeffernan其實我在寫這個問題的時候找到了答案,並且認爲在這裏寫它可以節省其他人幾分鐘 – 2013-02-18 16:39:43

回答

14

TStringListOwnsObjects屬性應設置爲True,以便清單在銷燬時釋放其對象。這可以通過調用constructor overload that receives the OwnsObjects parameter或創建後明確設置屬性來實現。最好將OwnsObjects設置爲對象構造的一部分。

documentation介紹屬性是這樣的:

OwnsObjects屬性指定字符串列表是否擁有存儲的對象與否。如果OwnsObjects屬性設置爲True,那麼Destroy析構函數將釋放爲這些對象分配的內存。

+0

是否有一個字段用於TStrings ? – none 2013-02-18 15:54:09

+1

@none,如果你的意思是,如果OwnsObjects屬性在'TStrings'類中可用,那麼答案是否定的,因爲這個機制已經在'TStringList'中實現,而不是在它的祖先'TStrings'類中實現。 – TLama 2013-02-18 16:00:56