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

Вниз

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

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

Наверх





Память: 0.48 MB
Время: 0.032 c
14-1088063193
Романов Р.В.
2004-06-24 11:46
2004.07.11
Что такое


1-1088253844
Maratus
2004-06-26 16:44
2004.07.11
Принтер печатает только после постановки в задание всех страниц


9-1079371772
Юрий Ж.
2004-03-15 20:29
2004.07.11
Что лучше DirectX или OpenGL?


1-1088149552
Maks Realov
2004-06-25 11:45
2004.07.11
Ещё один вопрос про ScanLine


1-1088216448
x_byte
2004-06-26 06:20
2004.07.11
webbrowser и его parent





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский