【问题描述】
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等多位群友提供意见和建议。