Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

О TList и функциях   Найти похожие ветки 

 
Pentium133 ©   (2004-10-13 11:54) [0]

Добрый день.

Такой вопрос к мастерам:

Если использую такой вариант реализации функции - ошибок нет:
function ReadList: TList;
begin
  Result:= TList.Create;
  //прочая инициализация
end;

вызов:
 List:= ReadList;

Но по логике приложения предпочтительнее делать так:
function ReadList: TList;
begin
  Result.Clear
  //прочая инициализация
end;


вызов:
 List:= TList.Create; //это в конструкторе
и при надобности:
 List:= ReadList;
И вот здесь AccessViolation...
Как мне правильно реализовать второй вариант?


 
Reindeer Moss Eater ©   (2004-10-13 12:02) [1]

function ReadList: TList;
begin
 Result.Clear
 //прочая инициализация
end;

А кто проинициализировал Result?
Санта?


 
ЮЮ ©   (2004-10-13 12:08) [2]

и при надобности вместо
List:= ReadList;
надо просто ReadList, где
procedure ReadList;
begin
 List.Clear // тот самый List, что в конcтрукторе
 //прочая инициализация
end;


 
Pentium133 ©   (2004-10-13 12:08) [3]

Но если во втором варианте писать Result:= TList.Create, не будет ли утечек памяти? Ведь на момент вызова List уже существует?


 
Reindeer Moss Eater ©   (2004-10-13 12:09) [4]

Ведь на момент вызова List уже существует?

А во Вселенной может существовать только один экземпляр TList?


 
Reindeer Moss Eater ©   (2004-10-13 12:10) [5]

function ReadList: TList;
begin
Result := существующий_экземпляр_TList;
Result.Clear
 //прочая инициализация
end;


 
Pentium133 ©   (2004-10-13 12:11) [6]


> ЮЮ ©   (13.10.04 12:08) [2]

Ваш вариант не подойте. Извените я сразу не сказал что ReadList это метод объекта. И кто когда его вызовет этот объект не знает. Он просто должен проинициализировать список.


 
Reindeer Moss Eater ©   (2004-10-13 12:13) [7]

Извените я сразу не сказал что ReadList это метод объекта.
А фиг ли мы обсуждаем код, которого не видим?


 
Pentium133 ©   (2004-10-13 12:14) [8]

Хм. Напрашивается такой вариант:
procedure ReadList(var lst: TList);
Думаю это будет правильно.
Судя по всему через функцию задуманно реализовать не удастся.


 
Pentium133 ©   (2004-10-13 12:17) [9]


> А фиг ли мы обсуждаем код, которого не видим?

"Не уверен не обгоняй"
Если сразу не понял вопроса чего тогда советовал?


 
Reindeer Moss Eater ©   (2004-10-13 12:19) [10]

А где я тебе что-либо советовал?


 
Amoeba ©   (2004-10-13 12:20) [11]


> Pentium133 ©   (13.10.04 12:17) [9]
>
> > А фиг ли мы обсуждаем код, которого не видим?
>
> "Не уверен не обгоняй"
> Если сразу не понял вопроса чего тогда советовал?

Так задавай вопрос так, чтобы он сразу был понят правильно.


 
Pentium133 ©   (2004-10-13 12:23) [12]

Давайте еще пофилосовствуем о "правильном вопросе"...
Вопрос был задан правильно, т.к. правильно заданный вопрос содержит в себе половину ответа и этот ответ я нашел сам. Все спасибо за косвенную помощь.


 
Reindeer Moss Eater ©   (2004-10-13 12:25) [13]

передавай привет Санте.



Страницы: 1 вся ветка

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
3-1096700983
It06
2004-10-02 11:09
2004.10.31
Query SQL -запрос


1-1098190193
Riki
2004-10-19 16:49
2004.10.31
Формулы в RichEdit


3-1096527989
Виктор
2004-09-30 11:06
2004.10.31
Keyfields с двумя полями в Lookup поле.


14-1097353746
Adder
2004-10-10 00:29
2004.10.31
Скажите, почему?


1-1097607921
Alexey Romanskiy
2004-10-12 23:05
2004.10.31
HTML в webbrowser