嵌套块中声明的内联变量的范围和生命周期,范围是否也适用于对象?

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,该对象将仍然存在于堆中(并且它可能会继续使用它有权访问的任何非内存资源),即使您放错了指向它的最后一个指针!