我继承了一个 Intraweb 应用程序,该应用程序具有 FastMM4 报告的 2MB 内存泄漏文本文件。我已经把它归结为一个类的 115 个实例泄漏 52 个字节。
对坏演员的简要描述是:
TCwcBasicAdapter = class(TCwcCustomAdapter)
protected
FNavTitleField: TField;
function GetAdapterNav(aDataSet: TDataSet): ICwcCDSAdapterNav; override;
public
constructor Create(aDataSource: TDataSource; aKeyField, aNavTitleField: TField; aMultiple: boolean);
end;
界面是:
ICwcCDSAdapterNav = interface(IInterface)
我是不是在叫错树,因为该属性是引用计数的?是否存在接口属性可以防止类被破坏的情况?
下面是上述方法的实现:
function TCwcBasicAdapter.GetAdapterNav(aDataSet: TDataSet): ICwcCDSAdapterNav;
var
AdapterNav: TCwcCDSAdapterNavBase;
begin
result := nil;
if Assigned(aDataSet) then begin
AdapterNav := TCwcCDSAdapterNavBasic.Create(aDataSet, FKeyField.Index, FNavTitleField.Index);
try
AdapterNav.GetInterface(ICwcCDSAdapterNav, result);
except
FreeAndNil(AdapterNav);
raise;
end;
end;
end;
类声明为:
TCwcCDSAdapterNavBase = class(TInterfacedObject, ICwcCDSAdapterNav)