Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.035 c
14-1090609792
Soft
2004-07-23 23:09
2004.08.08
Как вы относитесь к тем, кто делает HTML в WORD?


3-1089889217
Valer
2004-07-15 15:00
2004.08.08
Access, изменение содержимого запроса.


6-1086428501
Dennisius
2004-06-05 13:41
2004.08.08
StatusBar в TWebbrowser


14-1090580851
syte_ser78
2004-07-23 15:07
2004.08.08
День недели


3-1089620796
Newuser
2004-07-12 12:26
2004.08.08
Вопрос по SQL.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский