我写了这个非常简单的函数:
function CompressStream(inpStream: TBytesStream;
nCmpLevel: TZCompressionLevel = zcFastest): TBytesStream;
var
aCmpData: TBytes;
begin
ZCompress(inpStream.Bytes, aCmpData, nCmpLevel);
Result := TBytesStream.Create(aCmpData);
end;
这样对吗?我对本地数组变量
aCmpData
中数据的内存持久性有疑问。如果我们剪切行
Result := TBytesStream.Create(aCmpData)
,则函数结束时aCmpData
会超出范围,因此将释放其关联的内存。TBytesStream
的构造函数采用一个TBytes
,因此我将其传递给本地数组,这应该是“按引用”操作。函数结束并且
aCmpData
超出范围时,我的数据如何处理? 最佳答案
TBytes
类型是一个动态字节数组,声明为:
TBytes = TArray<Byte>;
此类动态数组由编译器管理,就像
string
变量一样。无需显式释放变量,变量的生存期由编译器管理。如果没有剩余的对数组的引用,它将被销毁。