【问题描述】
QWorker的释放记录类型的附加数据时,实际释放的是一个指针(直接FreeMem),如果包括有复杂的数据类型,如字符串、动态数组等,结果肯定就会是造成内存泄露,而原来的名称很容易给用户带来歧义,认为能够释放各种记录类型。所以修改该名称以便提示用户注意。
释放复杂记录类型的自动释放请使用jdfFreeAsC1~jdfFreeAsC6,具体例子,可以参考QWorkerDemo。如果释放的复杂记录超过6种,可以合并,并在传递Data成员参数时予以处理,参考逻辑如下:
type
TMyRecord=record
...
end;
PMyRecord=^TMyRecord;
TComplexRecord=record
TypeId:Byte;
case Integer of
1:(MyRecord:PMyRecord);
....
end;
PComplexRecord=^TComplexRecord;
...
var
AComplex:PComplexRecord;
begin
New(AComplex);
New(AComplex.MyRecord);
...
Workers.Post(...AComplex,jdfFreeAsC1,...);
end;
...
procedure DoCustomFreeDataC1(...)
var
pData:PComplexRecord;
begin
pData:=AData;
case pData.TypeId of
1:...
2:...
end;
end;
【严重级别】
一般
【更新级别】
可选
【特别感谢】
阿木报告此问题,群中qsl等多位群友提供意见和建议。
