HOME> 飞镖世界杯> 如何自动释放类/对象?

如何自动释放类/对象?

飞镖世界杯 2026-01-16 22:17:15

我编写了一个名为GC(垃圾回收)的函数,它接受一个对象并在执行退出当前方法时释放它。这有点像一个一行代码的缩写函数,用于一个Try Finally Free块。

与其写成:

procedure Test;

var AQuery: TQuery;

begin

AQuery := TQuery.Create(nil);

try

...

finally

FreeAndNil(AQuery);

end;

end;

我只是拥有:

procedure Test;

var AQuery: TQuery;

begin

AQuery := TQuery.Create(nil);

GC(AQuery);

...

end;

GC函数只是以接口的形式返回一个对象。

function GC(obj: TObject): IGarbo;

begin

Result := TGarbo.Create(obj);

end;

由于TGarbo类是从TInterfacedObject继承而来的,所以当TGarbo对象超出范围时,它将自动释放。在TGarbo对象的析构函数中,它还会释放您在其构造函数中传递的对象(您在GC函数中传递的对象)。

type

IGarbo = interface

['{A6E17957-C233-4433-BCBD-3B53C0C2C596}']

function Obj: TObject;

end;

TGarbo = class(TInterfacedObject, IGarbo)

private

FObj: TObject;

public

constructor Create(AObjectToGC: TObject);

destructor Destroy; override;

function Obj: TObject;

end;

{ TGarbo }

constructor TGarbo.Create(AObjectToGC: TObject);

begin

inherited Create;

FObj := AObjectToGC;

end;

destructor TGarbo.Destroy;

begin

if Assigned(FObj) then

FreeAndNil(FObj);

inherited;

end;

function TGarbo.Obj: TObject;

begin

Result := FObj;

end;

由于困在Delphi 7的世界里,看不到在不久的将来升级到内置垃圾回收版本的希望,因此我沉迷于使用这种简便的方法轻松释放本地临时对象! :)

win7电脑打不开exe程序怎么办 win7系统无法启动exe程序如何解决
轻松掌握帕萨特蓝牙连接技巧,让驾驶体验更便捷愉悦!