Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: 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 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.197 c
14-1079106741
Тимохов
2004-03-12 18:52
2004.04.11
Про XML и Excel


1-1080126357
WebErr
2004-03-24 14:05
2004.04.11
no comments


3-1081860223
gosha
2004-04-13 16:43
2004.04.11
Не сохраняются данные


7-1075315657
X-file_
2004-01-28 21:47
2004.04.11
разделитель дробной части числа


14-1079055644
Soft
2004-03-12 04:40
2004.04.11
Способы тихого и болезненного умервщления Свидетелей Иеговых.