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

Вниз

Все строки функции выполнятся?   Найти похожие ветки 

 
alex-drob   (2005-06-04 23:51) [0]

Если в функции написать

Icon:=TIcon.Create;
Icon.Handle:=ExtractIcon(Handle,PChar(ini.ReadString(TS.Items[i],"Icon","")),0);
Result:=Icon;
Icon.Free;


Последняя строка выполнится или нет?


 
lookin ©   (2005-06-04 23:58) [1]

А почему нет?


 
alex-drob   (2005-06-05 00:03) [2]

Я просто не знаю когда функция завершается,когда до End доходит или result


 
lookin ©   (2005-06-05 00:08) [3]

Ну, как мне кажется, функция завершается все-таки по окончании ее описания, т.е. до End


 
alex-drob   (2005-06-05 00:11) [4]

Спасибо!


 
Германн ©   (2005-06-05 00:14) [5]

Последняя строка выполнится гарантировано только, если включить ее в try...finally.


 
alex-drob   (2005-06-05 01:15) [6]

Последняя строка выполняется, но функция возвращает Result только по оканчании выполнения последней строки. Возникает ошибка, я понимаю что это из за того что icon уже уничтожен. Можно ли как нибудь уничтожить объект после выполнения функции.


 
lookin ©   (2005-06-05 01:21) [7]

А не проще Result после применеия уничтожать?


 
alex-drob   (2005-06-05 01:25) [8]

А как?


 
lookin ©   (2005-06-05 02:31) [9]

MyIcon.Free


 
DrPass ©   (2005-06-05 02:32) [10]

На самом деле ты вообще зря этот код в функцию засунул. Где тебе надо иконку использовать, там и пиши
Icon:=TIcon.Create;
Icon.Handle:=ExtractIcon(Handle,PChar(ini.ReadString(TS.Items[i],"Icon","")),0);
А уже после того, как использовал - Icon.Free


 
Abessalom   (2005-06-05 04:41) [11]


> DrPass ©   (05.06.05 02:32) [10]
..зря этот код в функцию засунул...

Есть неопределенное количество функций (Ворланд), результатом выполнения которых является объект, созданный внутри такой функции. Примеров можно найти много, NewItem, NewMenu... Не вижу аргументов...


 
Abessalom   (2005-06-05 04:54) [12]


> Abessalom   (05.06.05 04:41) [11]

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

По сути вопроса: все строки функции всегда выполняются, вплоть до завершения (end), выхода (Exit) или возникновения исключения. Оптимизатор также может чуть "подрезать" ваш код, если он по смыслу пуст.


 
злобная танька   (2005-06-05 10:03) [13]


> Abessalom   (05.06.05 04:54) [12]

ну, goto ещё :)


 
Abessalom   (2005-06-05 10:10) [14]


> злобная танька   (05.06.05 10:03) [13]

:)
Пусть еще.) Гото новхере)


 
begin...end ©   (2005-06-05 10:20) [15]

> alex-drob

Функция:

function CreateMyIcon: TIcon;
begin
 Result := TIcon.Create;
 try
   Result.Handle := ExtractIcon(...)
 except
   Result.Free;
   raise
 end
end.


Использование:

var
 Icon: TIcon;
begin
 Icon := CreateMyIcon;
 try
   // Использование Icon
 finally
   Icon.Free
 end
end.


 
alex-drob   (2005-06-05 17:26) [16]


> DrPass ©   (05.06.05 02:32) [10]


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


> begin...end ©   (05.06.05 10:20) [15]

Спасибо! Попробую.


 
icWasya ©   (2005-06-06 10:25) [17]

Abessalom   (05.06.05 04:41) [11]

>Есть ... количество функций , результатом выполнения которых является объект, созданный внутри такой функции. Примеров можно найти много, NewItem, NewMenu

Как правило, объекты, созданные внутри таких функций, сразу же попадают в какой нибудь список, ответственный за время жизни этих объектов



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

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

Наверх




Память: 0.5 MB
Время: 0.025 c
6-1112392985
Muh
2005-04-02 02:03
2005.06.29
Почему у флешгета получается, а у меня нет :)


1-1118060979
tunguss
2005-06-06 16:29
2005.06.29
Этика классов и сортировка TList...


4-1115666441
n0wheremany
2005-05-09 23:20
2005.06.29
Информация о процессе


3-1116708519
Starcom
2005-05-22 00:48
2005.06.29
Password...


6-1112261539
rOOse
2005-03-31 13:32
2005.06.29
TWebBrowser