![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему нет ошибки? [D7]
мскл © (2008-02-06 12:38:00)Разбираюсь с классами. Уровень начинающий. Возник вопрос, есть такой код:
procedure TForm1.Button1Click(Sender: TObject);
var
b1, b2, b3: TButton;
begin
b1.Free;
b1 := TButton.Create(Self);
b3 := TButton.Create(Self);
ShowMessage('b1 = 0x' + IntToHex(Integer(b1), 8));
b2 := b1;
ShowMessage('b2 = 0x' + IntToHex(Integer(b2), 8));
ShowMessage('b3 = 0x' + IntToHex(Integer(b3), 8));
end;
Почему в таком случае не возникает ошибки на выделенном месте: я же пытаюсь уничтожить ещё не созданный объект?
И ещё вопрос про такой фокус - не создаем b3, оставшийся код без изменений, получаем "Abstract error":
var
b1, b2, b3: TButton;
begin
b1.Free;
b1 := TButton.Create(Self);
// b3 := TButton.Create(Self);
ShowMessage('b1 = 0x' + IntToHex(Integer(b1), 8));
b2 := b1;
ShowMessage('b2 = 0x' + IntToHex(Integer(b2), 8));
ShowMessage('b3 = 0x' + IntToHex(Integer(b3), 8));
Потом убираем из модифициорванного кода уничтожение не созданного b1, исчезает ошибка:
var
b1, b2, b3: TButton;
begin
// b1.Free;
b1 := TButton.Create(Self);
// b3 := TButton.Create(Self);
ShowMessage('b1 = 0x' + IntToHex(Integer(b1), 8));
b2 := b1;
ShowMessage('b2 = 0x' + IntToHex(Integer(b2), 8));
ShowMessage('b3 = 0x' + IntToHex(Integer(b3), 8));
Как это называется?
ANB (2008-02-06 12:49:00) [21]Посмотри код фрее. У приятно удивись, что он ничего не делает, если ссылка на объект ниловая.
Leonid Troyanovsky (2008-02-06 12:45:00) [22]
> мскл (06.02.08 12:38)
> Как это называется?
Огласи цель исследований.
--
Regards, LVT.