Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вопрос по уничтожению объектов

6
09 февраля 2009 года
George
4.1K / / 05.01.2007
вот код:
[highlight=delphi]
function GetSomeList: TStringList;
begin
Result := TStringList.Create;
// Заполняю стринглист
end;
[/highlight]
далее я вызываю данную функцию, например
[highlight=delphi]
SomeListBox.Items := GetSomeList;
[/highlight]
теперь результат работы функции GetSomeList надо как-то уничтожить.
Если сделать GetSomeList.Free - функция выполняется два раза, а это не оптимально, да и порой неудобно. Каким образом лучше реализовать? То есть мне просто надо сделать функцию, возвращающую стринглист и чтобы без утечки памяти.
5
09 февраля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Washington
То есть мне просто надо сделать функцию, возвращающую стринглист и чтобы без утечки памяти.

Тогда лучше развернуть алгоритм:
Функция получает на вход уже готовый экземпляр TStrings, очищает его и заполняет объектами.

6
09 февраля 2009 года
George
4.1K / / 05.01.2007
это я уже додумал. тут больше теперь спрашиваю из спортивного интереса. =)
6
09 февраля 2009 года
George
4.1K / / 05.01.2007
вот к чему я пришел. Если например сделать так:
[highlight=delphi]
var
TempList: TStringList;
begin
TempList := GetSomeList;
try
SomeListBox.Items := TempList;
finally
TempList.Free;
end;
end;[/highlight]
в TempList передается указатель на стринглист, созданный функцией GetSomeList, то при выполнении строки TempList.Free этот самый стринглист должен умереть.

а вообще сделаю как Hardcase посоветовал ибо проще. Да и в принципе почему то эта идея пришла не сразу, а только после того, как задал вопрос здесь.
5
09 февраля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Washington
вот к чему я пришел

Если мне не изменяет память, то строка SomeListBox.Items := TempList; приводит к тому, что новый список строк передается в метод Assign у внутреннего списка листбокса, тем самым на TempList в принципе лишний объект.

6
09 февраля 2009 года
George
4.1K / / 05.01.2007
дык мы его и уничтожаем, TempList то бишь. И вместе с ним и результат работы функции GetSomeList ибо TempList - указатель на ентот результат. А сами строчечки остаются в листбоксе. =)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог