函数应该return一个记录还是一个指针?

Function should return a record or a pointer?

假设我有一个 "heavy" 记录,例如包含多个动态值数组。我这样声明:

PMyHugeRecord^ = TMyHugeRecord;
TMyHugeRecord = record
  AFirstArray: TSingleDynArray;
  // many many others
  ...  
  ALastArray: TSingleDynArray;
end;

虽然处理是在函数中进行的,但函数的结果应该作为指针输入类型,还是可以 return 记录变量?

function MyFunctionWhichCalculates: TMyHugeRecord;
// or
function MyFunctionWhichCalculates: PMyHugeRecord;

我的意思是在性能方面,尤其是为了避免堆栈溢出。换句话说,函数 return 是按引用还是按值的结果?

您可以return一条记录。它是否是 "heavy" 并不重要,因为在现实中,它将作为参考参数传入,换句话说 就好像 你已经声明:

procedure MyFunctionWhichCalculates(var Result: TMyHugeRecord);

不要 return 指针,即使您使用 New() 分配了记录,因为这会使用户承担通过指针 Dispose()-ing 记录的负担。这在同一个应用程序中没有问题(但仍然是负担),这是跨模块边界的问题,因为不同的内存管理器。总之,不推荐。