让我们回到基础知识。坦白说,我以前从未使用过 New
和 Dispose
函数。然而,当我读完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/