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

Вниз

освобождение памяти   Найти похожие ветки 

 
lena19   (2004-06-26 16:19) [0]

function TForm1.listcreate(s:string;width:integer):Tstringlist;
var s1:string;
n:integer;
begin
result:=tstringlist.create;
end;

произойдет ли освобождение памяти(result) при выходе из этой функции ??


 
Sir John ©   (2004-06-26 16:28) [1]

если Вы желаете узнать, останется ли жив объект после выхода из функции - да, останется.
Только непнятно, для чего Вы передаете параметры в функцию?
В дополнении Вам необходимо будет уничтожить объект при выходе из программы.
Кстати, мой Вам совет. Передавайте строковые переменные в функцию как константы. Т. е. вот так

function TForm1.listcreate(cosnt s:string;width:integer):Tstringlist;


 
KSergey ©   (2004-06-26 16:31) [2]

Нет
Вернее так: из под переменной result память, конечно высвободится, а вот созданный экземпляр объекта tstringlist - безусловно останется.
Остается не потерять на него ссылку и после уничтожить.


 
KSergey ©   (2004-06-26 16:35) [3]

> Sir John ©   (26.06.04 16:28) [1]
> Кстати, мой Вам совет. Передавайте строковые переменные
> в функцию как константы. Т. е. вот так

Ну, не всегда это допустимо, верно? ;)
Вы, вероятно, заботитесь об отсутсвии создния дополнительного экземпляра строки при вызове функции, верно?

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


 
GuAV ©   (2004-06-26 16:40) [4]

В хелпе raise->Re-raising exceptions, там почти этот пример.


 
Sir John ©   (2004-06-26 17:12) [5]

Ответ: KSergey
Вот только есть у меня воспоминание, что в этом случае все равно передасться ссылка на строку, и только если она изменятеся  внутри ф-ции - только в этот момент создается дополнительный экземпляр строки.

т. е. Вы хотите сказать, что внутри функции или процедуры я смогу изменить данные передаваемой строки как константы?

Т. е. Вы утверждаете, что этот код будет рабочим?

function TForm1.GetConstString(const s: String): String;
begin
s := "AABS";
Result := S;
end;


 
default ©   (2004-06-26 17:17) [6]

Sir John ©   (26.06.04 17:12) [5]
я смогу изменить данные передаваемой строки как константы?
конечно


 
Sir John ©   (2004-06-26 17:36) [7]

сорри, ошибка. Не данные строки, а изменить параметр, передаваемый как константа


 
default ©   (2004-06-26 17:38) [8]

всмысле?параметр не данные?


 
Тимохов ©   (2004-06-26 18:13) [9]


> Sir John ©   (26.06.04 17:12) [5]

ваш пример просто не скомпилится


 
lena19   (2004-06-26 18:32) [10]

получается что при очень частом вызове такой вункции потребности в памяти будут расти и в конце концов
прога висанет


 
GuAV ©   (2004-06-26 19:04) [11]

Не обязательно
for i:=0 to 9999 do listcreate("1111",2).Free;


 
lena19   (2004-06-26 20:40) [12]

To GuAV
что то я не поняла как в этом случаее получить значения
возвращаемые функцией ?


 
Anatoly Podgoretsky ©   (2004-06-26 20:43) [13]

Оно здесь в точке


 
GuAV ©   (2004-06-26 21:04) [14]

var list: TStrings;
begin
 list:=listcreate("1111",2);
 try
   // работаем со списком
 finally
   list.free;
 end;
end;

или так
begin
 with listcreate("1111",2) do
 try
   // работаем со списком
 finally
   free;
 end;
end;
Создание списка:
function TForm1.listcreate(cosnt s:string;width:integer):Tstringlist;
var
 ...
begin
 Result := TStringList.Create;
 try
   // Здесь Ваш код
 except
   Result.Free;
   raise;
 end;
end;



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

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

Наверх




Память: 0.5 MB
Время: 0.023 c
4-1084886158
zoom
2004-05-18 17:15
2004.07.11
Открыть определённый CD-rom


1-1088606170
Alexei Sviridov
2004-06-30 18:36
2004.07.11
Kak programmno zakrit formu


3-1087310524
libadmin
2004-06-15 18:42
2004.07.11
скрыть записи


14-1087915090
Volk
2004-06-22 18:38
2004.07.11
Кто это делается?


8-1082609276
hellfire
2004-04-22 08:47
2004.07.11
TAnimate и AVI-файл, вкомпиленный в ресурсы внешней DLL