在不使用变量的情况下在Delphi中实例化对象

时间:2018-05-16 19:56:26

标签: delphi

TObject.Create().method;

Method(TObject.Create);

这种类型的内存调用是在堆还是堆栈上分配的?是否需要发布?

1 个答案:

答案 0 :(得分:5)

Delphi类实例总是在堆上分配,是的,当你使用它们 1 时,需要通过TObject.Destroy()TObject.Free()个调用来释放它们),例如:

obj := TObject.Create;
try
  obj.method;
finally
  obj.Free;
end;

obj := TObject.Create;
try
  Method(obj);
finally
  obj.Free;
end;

procedure Method(obj: TObject);
begin
  ...
  obj.Free;
end;

Method(TObject.Create);

function Method(obj: TObject): TObject;
begin
  ...
  Result := obj;
end;

Method(TObject.Create).Free;

等等。使用构造函数Create的任何对象都必须使用析构函数进行Destroy

1:如果您在使用ARC for object lifetime management(目前是iOS,Android和Linux)的平台上运行代码,则会自动引用对象并自动发布。