Вниз
Скачать: CL | DM;

TObject.Free - ненужная проверка   Найти похожие ветки 

← →
Sem007   (2004-03-24 09:53) [0]

Давайте внимательно посмотрим на код метода Free:

procedure TObject.Free;
begin
 if Self <> nil then
   Destroy;
end;

Зачем здесь проверка Self<>nil?
Ведь если Self=nil, то сам метод Free невозможно вызвать!
Если следовать логике метода Free, то следующий код не должен вызывать ошибку:

tmp:= TObject.Create;
tmp:= nil;
tmp.Free;

Но ошибка появляется. В чём дело?


← →
Reindeer Moss Eater ©   (2004-03-24 09:59) [1]

Очевидно что проверка внутри Free не связана с опасением автора TObject что пользователь TObject вызовет метод у несуществующего экземпляра.
Она связана с другим.


← →
oso   (2004-03-24 10:05) [2]

>Ведь если Self=nil, то сам метод Free невозможно вызвать!

Вполне возможно. Free - статический метод,
его вызов по сути эквивалентнет внешней ф-и Free(obj);


← →
Sem007   (2004-03-24 10:11) [3]

>его вызов по сути эквивалентнет внешней ф-и Free(obj);

Что это за функция? Немогу найти в хелпе. В каком она модуле, а то хочется взглянуть на текст функции.


← →
Digitman ©   (2004-03-24 10:12) [4]


> Но ошибка появляется


какая ошибка-то ?
не должно быть никакой ошибки - все корректно


← →
Романов Р.В. ©   (2004-03-24 10:22) [5]


> не должно быть никакой ошибки - все корректно

Не понял????


← →
Digitman ©   (2004-03-24 10:25) [6]


> Романов Р.В. ©   (24.03.04 10:22) [5]


я не об утечке памяти, а о том, что никакие исключения этот код возбуждать не должен


← →
Cobalt ©   (2004-03-24 10:31) [7]

проверил в D4, D7 - никакой ошибки не происходит в этом коде.


← →
oso   (2004-03-24 10:35) [8]

>Что это за функция?

Я имел ввиду, что любой невиртуальный метод
объекта с точки зрения компилятора
представляет собой внешнюю ф-ю (процедуру),
в которую ссылка на объект передаётся первым параметром (Self),
и метод Free с точки зрения компилятора - это

procedure TObject_Free(Self: TObject);

Соответственно требование Self <> nil ниоткуда не следует.


← →
Sem007   (2004-03-24 10:38) [9]

Спасибо что разъяснили!



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.032 c
14-1082549162
Фикус
2004-04-21 16:06
2004.04.11
Траблы с доступом


11-1059566887
_Polymorphic_
2003-07-30 16:08
2004.04.11
KOLmdvXLGrid на скроллбоксе


7-1079636270
Константин
2004-03-18 21:57
2004.04.11
Автозапуск


3-1079068666
Gerderic
2004-03-12 08:17
2004.04.11
SQL &amp; FireBird


3-1079459290
Mike_T
2004-03-16 20:48
2004.04.11
SQL запрос!!! Уважаемые мастера помогите.




   Наверх