Якщо Ви знаєте, що функції в Delphi можуть повертати будь-які значення об'єкта, типу TStringList або TButton. Ви також повинні знати, що цим потрібно користуватися дуже обережно.
Хто повинен звільняти пам'ять?
У Delphi для Win32 кожен об'єкт, створений вручну, також вручну повинен бути звільнений. Це просто. Якщо Ви не звільните пам'ять від об'єктів, які Ви створювали, то Ваша програма врешті-решт займе всю пам'ять Windows і буде отримано повідомлення про помилку Acess Violations
Ось проста функція, яка повертає об'єкт Delphi - TStringList.
Це виглядає дуже просто. Зверніть увагу: так як функція повертає TStringList. а змінна неявно оголошується в кожної функції - result це і є змінна TStringList.
Більш того, коли Ви виходите з функції Ви створюєте об'єкт TStringList. відсутня в пам'яті. Хтось повинен звільнити об'єкт перед завершенням Вашого застосування.
Так як в більшості випадків Ви викликаєте функцію, коли Вам потрібен її результат, GetStringList буде викликатися з іншої частини коду:
Ось що важливо: ми маємо змінну типу TStringList ( "sl"). яка отримує результат функції GetStringList. щось робить з цим і нарешті, видаляє список з пам'яті, таким чином запобігаючи витоку пам'яті.
Попередження: коли функція повертає екземпляр об'єкта, завжди засвідчує, що об'єкт буде звільнений, коли в ньому більше немає потреби!
Зверніть увагу: TStringList не потребує власника, який буде створений. Для об'єктів, які потребують власника, сам власник відповідальний за об'єкт і сам знищує його!