Форум: "Основная";
Текущий архив: 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