TObject.Create().method;
Method(TObject.Create);
这种类型的内存调用是在堆还是堆栈上分配的?是否需要发布?
答案 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)的平台上运行代码,则会自动引用对象并自动发布。