我写了这个非常简单的函数:
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
所以我将它传递给我的本地数组,这应该是"by reference"操作 .
当函数结束且 aCmpData
超出范围时,我的数据怎么样?
1 回答
TBytes
类型是一个动态的字节数组,声明为:这样的动态数组由编译器管理,就像
string
变量一样 . 无需显式释放变量,其生命周期由编译器管理 . 当没有对数组的剩余引用时,它将被销毁 .