Вопрос по уничтожению объектов
[highlight=delphi]
function GetSomeList: TStringList;
begin
Result := TStringList.Create;
// Заполняю стринглист
end;
[/highlight]
далее я вызываю данную функцию, например
[highlight=delphi]
SomeListBox.Items := GetSomeList;
[/highlight]
теперь результат работы функции GetSomeList надо как-то уничтожить.
Если сделать GetSomeList.Free - функция выполняется два раза, а это не оптимально, да и порой неудобно. Каким образом лучше реализовать? То есть мне просто надо сделать функцию, возвращающую стринглист и чтобы без утечки памяти.
Цитата: Washington
То есть мне просто надо сделать функцию, возвращающую стринглист и чтобы без утечки памяти.
Тогда лучше развернуть алгоритм:
Функция получает на вход уже готовый экземпляр TStrings, очищает его и заполняет объектами.
это я уже додумал. тут больше теперь спрашиваю из спортивного интереса. =)
[highlight=delphi]
var
TempList: TStringList;
begin
TempList := GetSomeList;
try
SomeListBox.Items := TempList;
finally
TempList.Free;
end;
end;[/highlight]
в TempList передается указатель на стринглист, созданный функцией GetSomeList, то при выполнении строки TempList.Free этот самый стринглист должен умереть.
а вообще сделаю как Hardcase посоветовал ибо проще. Да и в принципе почему то эта идея пришла не сразу, а только после того, как задал вопрос здесь.
Цитата: Washington
вот к чему я пришел
Если мне не изменяет память, то строка SomeListBox.Items := TempList; приводит к тому, что новый список строк передается в метод Assign у внутреннего списка листбокса, тем самым на TempList в принципе лишний объект.
дык мы его и уничтожаем, TempList то бишь. И вместе с ним и результат работы функции GetSomeList ибо TempList - указатель на ентот результат. А сами строчечки остаются в листбоксе. =)