Форум: "Основная";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
ВнизFreeAndNil Найти похожие ветки
← →
DelphiLexx © (2007-02-09 13:05) [0]
var
procedure MyFreeAndNil(var Obj);
begin
Obj.Free;
Obj := Nil
end;
Почему FreeAndNil(obj) и MyFreeAndNil(obj) имеют разный результат выполнения. Объясните пожалуйста.
← →
TRUNK © (2007-02-09 13:12) [1]Что значит разный результат выполнения. Объясните пожалуйста.
← →
Правильный Вася (2007-02-09 13:17) [2]а оно компилируется ваще?
че заvar procedure
← →
DelphiLexx © (2007-02-09 13:30) [3]
> Что значит разный результат выполнения. Объясните пожалуйста.
Почему я спрашиваю данный вопрос. В своей проге я использую 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)
...
Почему так происходит?
← →
clickmaker © (2007-02-09 13:43) [4]во FreeAndNil поинтер обнуляется перед фактическим уничтожением объекта, путем создание временной ссылки. Это пресекает любые попытки обратиться к объекту, который находится в процессе убиения (ежели конечно делаются проверки if Obj <> nil)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c