Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.046 c