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

Вниз

image:=TImage.Create(Application);   Найти похожие ветки 

 
wsih ©   (2006-05-28 23:21) [0]

Правильно ли это иделолгически, этически и тп...
Я так понимаю у визуальных компонентов в конструктор передается кто-то, кто будет отвечать за высвобождение памяти. Наставте на путь истинный...


 
unknown ©   (2006-05-28 23:37) [1]

Нет, не правильно.
> Я так понимаю
Да.


 
wsih ©   (2006-05-28 23:44) [2]


> Нет, не правильно.

Так и знал. А почему? )...


 
Palladin ©   (2006-05-29 00:06) [3]


> unknown ©   (28.05.06 23:37) [1]

Почему неправильно? Я может хочу создать какой либо объект в каком нибудь глобальном модуле и обращатся к нему, не заботясь об его освобождении при окончании работы программы.


 
Palladin ©   (2006-05-29 00:10) [4]


> Правильно ли это иделолгически, этически и тп...

При такой постановке вопроса рассматривать с этих сторон практически нечего. Нужно рассматривать конкретные случаи.


> Я так понимаю у визуальных компонентов в конструктор передается
> кто-то, кто будет отвечать за высвобождение памяти.

Не у визуальных компонентов, а у всех наследников TComponent. В остальном ты понимаешь правильно.


 
wsih ©   (2006-05-29 00:16) [5]

В общем я понимаю так - всему, что создается динамически и требует в конструкторе хозяина можно ставить Application и не заботится об их последующей судьбе, так как за меня это сделает Aplication при своем терминировании.


 
Palladin ©   (2006-05-29 00:23) [6]


> wsih ©   (29.05.06 00:16) [5]

А вот это утверждение уже не есть хорошо ибо грозит тем, что в результате может расплодится куча объектов одноразового использования, которые так и застряну в Application до локального конца света. Если объект используется один раз или несколько, но только в одном контесте (скажем в теле процедуры или метода) то лучше в параметре конструктора использовать Nil и освобождать вручную после отработки. Стандартная конструкция выглядит как.

SomeComponent:=TSomeComponent.Create(Nil);
Try
 ...
Finally
 SomeComponent.Free;
End;

или при необходимости

SomeComponent:=TSomeComponent.Create(Nil);
Try
 Try
   ...
 Except
   <обработка исключений>
 End;
Finally
 SomeComponent.Free;
End;


 
wsih ©   (2006-05-29 00:35) [7]

Спасибо, именно это и хотел услышать. :)


 
unknown ©   (2006-05-29 00:52) [8]


> Palladin ©   (29.05.06 00:06) [3]
> Почему неправильно?

Я изначально хотел пояснить, даже несколько строчек написАл
(правда потом стер :)), но ведь задачи разные бывают и
в большинстве случаев image:=TImage.Create(Application); некорректно,
бо можно мемликов поиметь :)


 
wsih ©   (2006-05-29 01:06) [9]

А кто такие мемлики? =О


 
Palladin ©   (2006-05-29 01:21) [10]


> unknown ©   (29.05.06 00:52) [8]

в случае с TImage да... использовать сразу в нескольких созданных формах не получится (если они одновременно отображаются конечно), точнее получится если пользоваться BitBlt, и работать с этим объектом лучше в конктесте той формы которая использует его... но есть одно но... Application можно назначать владельцем для "тяжелых" на подьем компонентов и/или мелких и очень очень часто использующихся (например в циклах из разных методов и классов)... и в случае TImage если изображение довольно объемное, что проявляется ощутимая задержка при его создании, то, думаю, стоит все таки создать глобальный объект и BitBlt"ить его на созданные TImage на форме (с владельцем формой конечно)...

ну а по поводу мем ликов, ну они не совсем мемлики технически, Application то о них помнит, но организационно, я согласен, они таковыми являются :) да и я уже высказался по этому поводу в [6]


> wsih ©   (29.05.06 01:06) [9]

Утечки памяти


 
TUser ©   (2006-05-29 04:43) [11]

Если объект лежит себе на форме и менять Parent не предполагается (а обычно это так для TComponent) - то, имхо, лучше и оунером сделать эту форму, а не nil и не Application. А то что получиться, если этих форм будет создано 500 штук в цикле создать-поработать-закрыть-создать ...



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

Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
1-1147265777
tytus
2006-05-10 16:56
2006.06.18
ListBox


2-1149084200
Тимофеич
2006-05-31 18:03
2006.06.18
форма


15-1148447053
Ega23
2006-05-24 09:04
2006.06.18
С Днём рождения! 24 мая


4-1142905761
powerchute
2006-03-21 04:49
2006.06.18
Управление настройками электропитания


15-1147329255
pavel_guzhanov
2006-05-11 10:34
2006.06.18
23.05.2006 Москва. Borland Developers Studio 2006: продуктивность





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