Главная страница
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.036 c
8-1075969776
nike
2004-02-05 11:29
2004.04.11
winamp (in_mp3.dll, out_wave.dll) + delphi


14-1079600414
Aristarh
2004-03-18 12:00
2004.04.11
Помогите перевести (рус->англ)


14-1080850933
VMcL
2004-04-02 00:22
2004.04.11
Ваши оценки


7-1076059968
Guest
2004-02-06 12:32
2004.04.11
Как поменять имя и описание Пк в сети


1-1082742943
Федя Мегатронов
2004-04-23 21:55
2004.04.11
Компилятор пишет "Undeclared identifier: FileExists "