嵌套块中声明的内联变量的范围和生命周期,范围是否也适用于对象?
Scope and Lifetime of Inline Variables Declared in Nested Blocks, Do the scope apply for Objects as well?
我是否必须稍后在对象上 运行 FreeAndNil 以释放为该对象分配的内存,或者它将由 delphi 的新作用域功能处理?
begin
var foo := TObject.Create();
end;
您仍然需要像以前一样手动释放对象。
对象的生命周期与变量的范围无关。一直都是这样,现在仍然适用。 (事实上 ,完全有可能创建一个对象而无需将其分配给变量。)
即使在这个老派的例子中,没有 Free
对象也会被泄露,即使 Bitmap
变量在过程的 end;
处超出范围。
procedure Test;
var
Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
try
// use the bitmap
finally
Bitmap.Free;
end;
end;
如果没有 Bitmap.Free
,该对象将仍然存在于堆中(并且它可能会继续使用它有权访问的任何非内存资源),即使您放错了指向它的最后一个指针!
我是否必须稍后在对象上 运行 FreeAndNil 以释放为该对象分配的内存,或者它将由 delphi 的新作用域功能处理?
begin
var foo := TObject.Create();
end;
您仍然需要像以前一样手动释放对象。
对象的生命周期与变量的范围无关。一直都是这样,现在仍然适用。 (事实上 ,完全有可能创建一个对象而无需将其分配给变量。)
即使在这个老派的例子中,没有 Free
对象也会被泄露,即使 Bitmap
变量在过程的 end;
处超出范围。
procedure Test;
var
Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
try
// use the bitmap
finally
Bitmap.Free;
end;
end;
如果没有 Bitmap.Free
,该对象将仍然存在于堆中(并且它可能会继续使用它有权访问的任何非内存资源),即使您放错了指向它的最后一个指针!