Текущий архив: 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.48 MB
Время: 0.036 c