Использование классовых методов для выявления утечек памяти
Материал из DRKB
Классовые методы применимы прямо из класса, то есть нет необходимости создавать экземпляр при помощи конструктора.
Хотелось бы определить еще и классовые переменные, но их не существует в Object Pascal, поэтому определим переменную в секции implementation модуля программы. Эта переменная будет содержать количество экземпляров класса на данный момент времени.
Определим две классовые процедуры: AddInstance (увеличение счетчика экземпляров) и ReleaseInstance (уменьшение счетчика экземпляров). Они будут вызываться конструктором и деструктором соответственно. И еще одну классовую функцию NumOfInstances, которая вернет текущее количество экземпляров.
Добавим секции initilialization и finalization. В секции iinalization проверяем количество экземпляров, и если <> 0, значит не все созданные экземпляры были освобождены.
unit U_Foo;
interface
uses
Classes, Windows, SysUtils;
type
TFoo = class
private
class procedure AddInstance;
class procedure ReleaseInstance;
public
constructor Create;
destructor Destroy; override;
class function NumOfInstances: Integer;
end;
implementation
var
TFoo_Instances: Integer = 0;
{ TFoo }
class procedure TFoo.AddInstance;
begin
Inc(TFoo_Instances);
end;
constructor TFoo.Create;
begin
AddInstance;
end;
destructor TFoo.Destroy;
begin
ReleaseInstance;
inherited;
end;
class function TFoo.NumOfInstances: Integer;
begin
Result := TFoo_Instances;
end;
class procedure TFoo.ReleaseInstance;
begin
Dec(TFoo_Instances);
end;
initialization
finalization
if TFoo_Instances <> 0 then
MessageBox(0, PChar(Format('%d экземпляров of TFoo активно', [TFoo_Instances])),
'Предупреждение', MB_OK or MB_ICONWARNING);
end.
Source: Delphi Knowledge Base: http://www.baltsoft.com/
ID: 04529