我在使用由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

最佳答案

我将关闭此链接,因为我发现了其他可能导致泄漏的问题。在我确认之前,保持开放状态没有任何意义。

09-29 21:34