我在使用由Delphi XE中的WSDL导入程序创建的TRemotable后代类遇到内存管理方面的一些挑战。
TRemotable后代类声明如下:
Patient = class(TRemotable)
private
...
FDOB: TXSDateTime;
...
function GetDOB: TXSDateTime;
procedure SetDOB(const ATXSDateTime: TXSDateTime);
...
public
destructor Destroy; override;
published
...
property DOB: TXSDateTime read GetDOB write SetDOB;
...
end;
...
implementation
...
destructor Patient.Destroy;
begin
SysUtils.FreeAndNil(FDOB);
inherited Destroy;
end;
...
function Patient.GetDOB: TXSDateTime;
begin
Result := FDOB;
end;
procedure Patient.SetDOB(const ATXSDateTime: TXSDateTime);
begin
FDOB := ATXSDateTime;
end;
我注意到的一个问题是,当我创建并使用TXSDateTime子代DOB(或在另一个示例中,称为“ Qty”的TXSDecimal)时,如果我使用FreeAndNil(Qty)或FreeAndNil(DOB),Patient类仍会尝试使用FreeAndNil(TXSCustom_Descendant );我将从EurekaLog内存泄漏检测器中获得“多次释放”异常。如果我不释放TXSxxx对象,而只是释放Patient类-无论如何在对象上调用FreeAndNil(),我会发生内存泄漏。
我意识到这听起来有些含糊,但是我已经与Web Svc,WSDL Importer和各种相关的接口进行了很多合作,并且从未见过这样的问题。
TIA
最佳答案
我将关闭此链接,因为我发现了其他可能导致泄漏的问题。在我确认之前,保持开放状态没有任何意义。