![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FreeAndNil
DelphiLexx © (2007-02-09 13:05:00)
var
procedure MyFreeAndNil(var Obj);
begin
Obj.Free;
Obj := Nil
end;
Почему FreeAndNil(obj) и MyFreeAndNil(obj) имеют разный результат выполнения. Объясните пожалуйста.
clickmaker (2007-02-09 13:43:00) [1]во FreeAndNil поинтер обнуляется перед фактическим уничтожением объекта, путем создание временной ссылки. Это пресекает любые попытки обратиться к объекту, который находится в процессе убиения (ежели конечно делаются проверки if Obj <> nil)
DelphiLexx (2007-02-09 13:30:00) [2]
> Что значит разный результат выполнения. Объясните пожалуйста.
Почему я спрашиваю данный вопрос. В своей проге я использую DBGridEh. В одной из колонок при клике по ячейке появляется раскрывающийся список(LookUp поля). Так вот если я начну закрывать форму с этим гридом при раскрытом списке, то выскакивает ошибка. После трудоемкой трассировки выяснил место ошибки:
Пример из DBGridEh:
destructor TCustomDBGridEh.Destroy;
begin
FIntMemTable := nil;
if FStyle <> nil then
FStyle.RemoveChangeNotification(Self);
FColCellParamsEh.Free;
Selection.Clear;
FColumns.Free; FColumns := nil;
...
Делаю так, ошибка исчезает
destructor TCustomDBGridEh.Destroy;
begin
FIntMemTable := nil;
if FStyle <> nil then
FStyle.RemoveChangeNotification(Self);
FColCellParamsEh.Free;
Selection.Clear;
FreeAndNil(FColumns)
...
Почему так происходит?
Правильный Вася (2007-02-09 13:17:00) [3]а оно компилируется ваще?
че заvar procedure
TRUNK (2007-02-09 13:12:00) [4]Что значит разный результат выполнения. Объясните пожалуйста.