Re[4]: Smart pointers(деструкторы) в у Delphi
От: kavlad Россия http://www.wavesoft.ru
Дата: 24.02.04 13:14
Оценка: 14 (2)
Здравствуйте, s.ts, Вы писали:

ST>Здравствуйте, Курилка, Вы писали:


К>>Так я не пойму — можно ли заставить дельфи деструкторы вызывать или нет? Или из твоего текста


ST>можно, но это будет криво выглядеть


Не так уж и криво.
Часто надо использовать локальные переменные — экземпляры классов, например, TStringList.
Тогда можно написать приметрно такой код:


interface 
...
  IObject = interface(IUnknown)
    function getObject: TObject;
    property AObject: TObject read getObject;
  end;

  TAutoPointer = class(TInterfacedObject, IObject)
  private
    FObj: TObject;
  public
    constructor Create(Obj: TObject);
    destructor Destroy; override;
    function getObject: TObject;
  end;

implementation

constructor TAutoPointer.Create(Obj: TObject);
begin
  FObj := Obj;
end;

destructor TAutoPointer.Destroy;
begin
  FreeAndNil(FObj);
  inherited;
end;

function TAutoPointer.getObject: TObject;
begin
  Result := FObj;
end;


и вот так использовать



procedure SomeProcedure;
var
  StringList: IObject;
begin
  StringList := TAutoPointer.Create(TStringListCreate);
  with StringList.AObject as TStringList do
  begin
    // что-то делаем, но StringList не уничтожаем
  end;
  // уничтожать StringList не надо
end;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.