Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.061 c
1-1117821844
Tuzemec
2005-06-03 22:04
2005.06.29
избавиться от Sysutils подкиньте модуль


1-1117782191
BigBan
2005-06-03 11:03
2005.06.29
Операции со строками


4-1115541375
psa247
2005-05-08 12:36
2005.06.29
RegOpenKey


14-1117440246
lookin
2005-05-30 12:04
2005.06.29
Что видит TOpenDialog?


4-1115289584
pavel_guzhanov
2005-05-05 14:39
2005.06.29
Как определить размер файла?





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