Главная страница
    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.48 MB
Время: 0.014 c
1-1147423740
@LeX-I
2006-05-12 12:49
2006.06.18
ошибка вставки в RichEdit


2-1148957631
verybadbug
2006-05-30 06:53
2006.06.18
загрузка данных в webbrowser


2-1148988526
Steep
2006-05-30 15:28
2006.06.18
Запук с дополнительными параметрами


2-1149146091
new_user
2006-06-01 11:14
2006.06.18
Пункт меню


1-1147515408
sinus
2006-05-13 14:16
2006.06.18
Кнопка на таскбаре





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