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

Вниз

Создание-удаление диалога   Найти похожие ветки 

 
J_f_S   (2007-12-20 03:49) [40]

А, блин. Очипятки в [38]. Но смысл понятен.


 
Германн ©   (2007-12-20 03:54) [41]


> lookin ©   (20.12.07 03:37) [34]
>
> > [25] Германн ©   (20.12.07 01:43)
>
> Я понимаю под локальной переменной ту, которая срабатывает
> только при входе в некоторую процедуру-функцию. Нет?
>

Правильно понимаешь.

> lookin ©   (20.12.07 03:39) [35]
>
> > [25] Германн ©   (20.12.07 01:43)
>
> а Assigned(***) "Tests for a nil (unassigned) pointer or
> procedural variable".

А Assigned проверяет переменную-параметр на 0 (nil). А как уже было сказано Делфи не обнуляет локальные переменные по-умолчанию. (И тут нигде и ни как не проверяется на что указывает сия переменная.)

> lookin ©   (20.12.07 03:40) [36]
>
> > [33] Германн ©   (20.12.07 02:49)
>
> не спорю насчет твоей справедливости, только поясни плз
>

Надеюсь пояснил. Или есть ещё вопросы?

> lookin ©   (20.12.07 03:41) [37]
>
> > [33] Германн ©   (20.12.07 02:49)
>
> Просто казалось бы, разницы между if not Assigned(Dlg) и
> Dlg:=nil нету... Нету?
>

Де-факто нет никакой разницы. Де-юре есть. См. Германн ©   (20.12.07 01:55) [26]


 
lookin ©   (2007-12-20 04:01) [42]

Удалено модератором


 
lookin ©   (2007-12-20 04:03) [43]

Удалено модератором
Примечание: Следи за речью


 
Германн ©   (2007-12-20 04:09) [44]


> > [41] Германн ©   (20.12.07 03:54)
>
> Да как бы ни хрена ты не пояснил... Без обид, мальчик...
>
>

Ну тогда читай книги, старичок. Вот только сумлеваюсь что ты сможешь на смертном одре сказать "Дык я всё-таки хоть что-то понял в Дельфи/Паскале"!
Без обид, Олежка.


 
lookin ©   (2007-12-20 04:11) [45]

> [44] Германн ©   (20.12.07 04:09)

Ага, спасибо. Просто нефиг советовать того, что сам не пробовал (таджикская мудрость)...


 
lookin ©   (2007-12-20 04:13) [46]

Мне б что конструктивное...


 
Германн ©   (2007-12-20 04:18) [47]


> lookin ©   (20.12.07 04:11) [45]
>
> > [44] Германн ©   (20.12.07 04:09)
>
> Ага, спасибо. Просто нефиг советовать того, что сам не пробовал
> (таджикская мудрость)...
> <Цитата>
>
> lookin ©   (20.12.07 04:13) [46]
>
> Мне б что конструктивное...
>

Уймись, ради бога!
Ведь когда утром проснутся все прочие форумчане, от тебя не оставят ничего. Придётся менять ник или продолжать позорное существование.


 
Loginov Dmitry ©   (2007-12-20 07:35) [48]

> Похоже разработчики Борланда оказали дурную услугу пользователям
> Дельфи введя в язык функцию Assigned(). Реально, имхо, она
> никому не нужна кроме разработчиков компонент.


Реально может и не нужна, но все ею пользуются. Удобно при проверке переменных процедурного типа. Запись
if Assigned(Proc1) and Assigned(Proc2)
выглядет элегантнее, чем
if (@Proc1 <> nil) and (@Proc2 <> nil)
хотя по числу букв - одно и то же )))


 
Loginov Dmitry ©   (2007-12-20 07:40) [49]

> Foo::GetInstance()::PrintA(); // a = 0 - обьект класса Foo
> создается тут, в GetInstance
> Foo::GetInstance()::PrintA(); // a = 1 - а тут он просто
> продолжает жить
>
>
> Элегантно. (Грабли впрочем тут есть, не спорю...)


В Delphi также можно. Но особого применения {$J+} не получило (этож целых 4 буквы в модуле дополнительно набивать нужно! )))


 
han_malign ©   (2007-12-21 16:35) [50]


> Мне б что конструктивное...
>
var FontDialog: TFontDialog;
begin
   CreateFontDialog(FontDialog,nil);

- объясняю на пальцах
1. var FontDialog: TFontDialog; - означает что указатель СТЕКА! смещается на четыре байта, резервируя место под переменную на СТЕКЕ!.
2. Стек по выходу из процедур никто не чистит, т.к. попытки вручную очистить локальные переменные при выходе проигнорирует оптимизатор, а процессорная инструкция ret - по определению, только сдвигает указатель стека назад и переходит в точку возврата, по адресу из текущей ячеки.

Итак мы выяснили: 1. переменная выделяется на стеке; 2. в стеке лежат остатки жизнедеятельности предыдущих процедур.

Вопрос: чему равно значение указателя на экземляр класса - FontDialog?

Ответ: если очень сильно повезет то нулю, но лучше, все таки, если не повезет сразу - ошибка отловится на этапе отладки...

БИБЛИЯ: ВСЕ (локальные) переменные надо ИНИЦИАЛИЗИРОВАТЬ!

В данном конкретном случае это должно выглядеть так:
var FontDialog: TFontDialog;
begin
   FontDialog:= nil;
   CreateFontDialog(FontDialog,nil);
   ...

З.Ы. Длинные строки и динамические массивы - инициализируются compiler magic(в том числе в локалных структурах, массивах и массивах структур), но лучше, даже в этом случае, не привыкать к халяве и инициализировать все явно...



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

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

Наверх




Память: 0.54 MB
Время: 0.005 c
2-1217251593
alex-drob
2008-07-28 17:26
2008.09.07
Выборка из таблицы по дате


2-1217367780
Неподарок
2008-07-30 01:43
2008.09.07
Документ как книга


2-1217307332
Dymok
2008-07-29 08:55
2008.09.07
Как двигать форму, если Form1.BorderStyle:=bsNone ?


2-1217087498
fil-23
2008-07-26 19:51
2008.09.07
работа с компонентой ServerSocket и ClientSocket


2-1217352003
werty
2008-07-29 21:20
2008.09.07
определение границ ланных в Excel





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