Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизВсе строки функции выполнятся? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c