函数应该返回记录还是指针?

par*_*ise 3 delphi delphi-2007

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

PMyHugeRecord^ = TMyHugeRecord;
TMyHugeRecord = record
  AFirstArray: TSingleDynArray;
  // many many others
  ...  
  ALastArray: TSingleDynArray;
end;
Run Code Online (Sandbox Code Playgroud)

处理发生在函数中,是否应该将函数的结果键入为指针,还是可以返回记录变量?

function MyFunctionWhichCalculates: TMyHugeRecord;
// or
function MyFunctionWhichCalculates: PMyHugeRecord;
Run Code Online (Sandbox Code Playgroud)

我的意思是在性能方面,尤其是避免堆栈溢出.换句话说,函数是通过引用还是通过值返回结果?

Rud*_*uis 9

您可以返回记录.它是否"重"并不重要,因为实际上,它将作为参考参数传递,换句话说就好像你已声明:

procedure MyFunctionWhichCalculates(var Result: TMyHugeRecord);
Run Code Online (Sandbox Code Playgroud)

即使您使用了分配记录,也不要返回指针,New()因为这会让用户承担Dispose()通过指针记录记录的负担.这在同一个应用程序中没有问题(但仍然是一个负担),这是跨模块边界的问题,因为不同的内存管理器.总而言之,不建议这样做.