Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Exception in destructor


Автор: Gershkovich 6.2.2008, 15:40
Привет всем!

Можно ли предотвращать уничтожение инстанса выбросив exception в деструкторе?
вот таким образом :

Код

destructor TProfile.Destroy;
  if Locked then raise Exception.Create('Locked :(');

  inherited;
end;


Будет ли инстанс  после этого юзабельным ?
Спрашиваю от того что не уверен в этом.
Я провел такой эксперимент:

Код

  TDummy = class
    Name : string;
    destructor Destroy; override;
  end;

  destructor TDummy.Destroy;
  begin
    // Empty destructor
    inherited;
  end;

....

  d:= TDummy.Create;
  d.Name:= 'The Name';

  try
    d.Free;
  except
    // do nothing
  end;

  ShowMessage(d.Name);


и обнаружил что вызов ShowMessage происходит нормально
как будто объект существует.


Заранее спасибо.

Автор: lukas 6.2.2008, 17:15
естественно объект останется, если исключение вызвано до inherited... что удивительного.... 

Автор: Alexeis 10.2.2008, 17:46
Gershkovich, не хорошо это. Самый худший вариант развития это исключение в деструкторе.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)