2

我在使用由 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 内存泄漏检测器中获得“Multi Free”异常。如果我不释放 TXSxxx 对象,而只是释放 Patient 类 - 无论如何都会在对象上调用 FreeAndNil(),我会遇到内存泄漏。

我意识到这听起来有点模糊,但是我已经使用 Web Svcs、WSDL 导入器和各种相关接口进行了很多工作,并且从未见过这样的问题。

TIA

4

1 回答 1

0

我将关闭它,因为我发现了其他可能导致泄漏的问题。在我确认之前,将其打开是没有意义的。

于 2013-05-20T18:16:53.307 回答