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

Вниз

Время жизни экземпляра класса ??   Найти похожие ветки 

 
Slaga ©   (2004-07-27 19:52) [0]

Такой вопрос, если я создаю переменную типа:
TStrCodeList := TStringList.Create;

то нужно ли в конце делать:
TStrCodeList.free;

Или же она сама очистится когда выйдет за пределы видимости функции в которой она определена ?


 
ламер ©   (2004-07-27 19:56) [1]

нужно.


 
Slaga ©   (2004-07-27 19:59) [2]

есть еще мнения ?


 
TopT   (2004-07-27 20:05) [3]

Есть, еще мнения.
НУЖНО, причем обязательно.


 
Anatoly Podgoretsky ©   (2004-07-27 20:06) [4]

Как теперь, мнений достаточно?


 
Slaga ©   (2004-07-27 20:06) [5]

а почему она не чистится сама, она ж локальная переменная


 
Slaga ©   (2004-07-27 20:08) [6]

Да, но если я например в функции почищу ее, то потеряется значение которое я возвращаю как Result !&


 
TopT   (2004-07-27 20:11) [7]

При выходе из функции освободится только место занятое указателем на обьект, а все место занятое обьектом, выгружено не будет.
Это все равно что:
Procedure Proc;
var
p:^integer;
begin
new(p);
end;

По завершении, месо занятое самим указателем, будет освобожено, а память, по адресу на который "p" указывает, останется занятым.


 
ламер ©   (2004-07-27 20:12) [8]

> Slaga ©   (27.07.04 20:06) [5]
> а почему она не чистится сама, она ж локальная переменная

локальная переменная TStrCodeList (начинать имя переменной с буквы T - дурной тон) - это всего лишь указатель на область памяти, выделенную при создании экземпляра класса TStringList. так что переменная-то уничтожится при выходе из области действия, а вот память так и останется занятой.


 
TopT   (2004-07-27 20:14) [9]

Slaga ©   (27.07.04 20:08) [6]
>Да, но если я например в функции почищу ее, то потеряется значение которое я возвращаю как Result !&
Если ты хочеш вернуть свежесозданый обьект, тогда конечно освобожать его ненадо, о его освобождении надо будет позаботится вне процедуры.


 
Slaga ©   (2004-07-27 20:15) [10]

Понял, спасибо, что делать в случае передачи переменной из функции, получается если я сделаю free то очищу значение переменной и не смогу воспользоваться им в вызывающей процедуре/функции.


 
Slaga ©   (2004-07-27 20:16) [11]

>TopT
Тоесть чистить уже надобудет переменную в которую я передам адрес переменной из функции.


 
TopT   (2004-07-27 20:33) [12]

Slaga ©   (27.07.04 20:16) [11]
>Тоесть чистить уже надобудет переменную в которую я передам адрес переменной из функции.
Да.


 
Esu ©   (2004-07-27 21:11) [13]

Вообщем можешь просто делать StgingList до функции. Потом в функции будет указатель на уже созданный стринглист в который она что-то запишет/считает и вывалится. Когда обработаешь результат StringList освободишь


 
Esu ©   (2004-07-27 21:13) [14]

делать - создавать экземпляр :)


 
Игорь Шевченко ©   (2004-07-27 22:41) [15]


> есть еще мнения ?


Есть. Например, не чистить. Все равно, когда процесс завершится, вся его помять будет возрващена системе.

И еще одно мнение есть - читать книги. НАИЗУСТЬ. Вместо того, чтобы задавать вопросы на форуме.


 
Defunct ©   (2004-07-27 22:51) [16]

> есть еще мнения ?

вот скажем такой вариат:

Function Zzz:TStrCodeList;
Begin
 Result := TStrCodeList.Create;
 with Result do
 ...
 ...
End;

где-то в программе:

 X:=Zzz;
 ...
 X.Free;

В этом случае в самой функции память освобождать не придется.


 
Slaga ©   (2004-07-28 09:57) [17]

>Defunct

да, вот это дейвствительно интересно.

>Игорь Шевченко, ну а Вы как всегда злые и недобрые, хоть и отвечаете на вопросы :))



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

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

Наверх




Память: 0.5 MB
Время: 0.04 c
4-1088189241
Nomolos
2004-06-25 22:47
2004.08.08
Каким образом обработать нажатие на кнопку по описателю окна?


3-1089873227
Berezne
2004-07-15 10:33
2004.08.08
Как восстановить индексы?


14-1090552599
Думкин
2004-07-23 07:16
2004.08.08
Новосибирск - 5?


6-1086518328
VID
2004-06-06 14:38
2004.08.08
Поведение сокета при отправке данных


3-1089795423
User_OKA
2004-07-14 12:57
2004.08.08
Упаковка dbf