Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.024 c
1-1117802947
smesh
2005-06-03 16:49
2005.06.29
Полная поддержка Юникод


4-1115450526
hwmaster
2005-05-07 11:22
2005.06.29
как проверить сколько свободного места осталось в оперативке ?


1-1117604698
Mary
2005-06-01 09:44
2005.06.29
Access Violation и DLL


4-1115644993
MakedoneZ
2005-05-09 17:23
2005.06.29
Рисование не на форме.


1-1117610623
pudel
2005-06-01 11:23
2005.06.29
Вывод текста в заданном прямоугольнике




   Наверх