Здравствуйте, 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;