Delphi:使用 System.New() 代替局部变量除了节省少量内存之外还有什么优点?

标签 delphi pascal fpc

让我们回到基础知识。坦白说,我以前从未使用过 NewDispose 函数。然而,当我读完the New() documentation and the included examples后上Embarcadero Technologies的网站和 Delphi Basics explanation of New() ,它在我的脑海中留下了疑问:

使用 System.New() 而不是局部变量,除了节省少量内存之外,还有哪些优点?

New() 的常见代码示例大致如下:

  var
      pCustRec : ^TCustomer;
  begin
      New(pCustRec);
      pCustRec^.Name := 'Her indoors';
      pCustRec^.Age  := 55;
      Dispose(pCustRec);
  end;

上面的代码在什么情况下比下面的代码更合适?

  var
      CustRec : TCustomer;
  begin
      CustRec.Name := 'Her indoors';
      CustRec.Age  := 55;
  end;

最佳答案

如果您可以使用局部变量,请这样做。这是一条几乎没有异常(exception)的规则。这会产生最干净、最高效的代码。

如果需要在堆上分配,请使用动态数组、GetMem 或 New。分配记录时使用New。

无法使用堆栈的示例包括编译时大小未知的结构或非常大的结构。但对于记录(New 的主要用例)来说,这些担忧很少适用。

因此,如果您面临在记录时使用堆栈还是堆的选择,那么堆栈始终是正确的选择。

关于Delphi:使用 System.New() 代替局部变量除了节省少量内存之外还有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14228746/

相关文章:

delphi - Delphi 中的网页抓取

linux - openCV库GLIBC编译错误

pascal - 1991 Pascal 中的随机数

variables - Pascal-如何将实数转换为整数变量

delphi - 无法修改EnumWindows回调中的参数

interface - 使用接口(interface)时的 SIGSEGV

delphi - 如何创建一个可与 VCL 和 FMX 一起使用的内部计时器?

delphi - 线程管理问题!

Delphi代码迁移问题

delphi - FreePascal RTTI。有没有办法调用方法?