1,183
社区成员
发帖
与我相关
我的任务
分享
unit UnitManagedObject;
interface
uses
Windows
;
type
TManagedObject = class(TObject)
{Management Properties}
private
FManagementCount : Integer; //对象引用计数
public
{structor}
constructor Create;
public
{Management}
procedure Free;
function Attach:TManagedObject;
function Detach: Integer;
end;
implementation
{TManagedBaseObject}
{structor}
constructor TManagedObject.Create;
begin
Inherited Create;
FManagementCount := 1;
end;
{Management}
function TManagedObject.Attach : TManagedObject;
begin
Result := Nil;
if InterlockedIncrement(FManagementCount) = 1 then
begin
InterlockedDecrement(FManagementCount);
Exit;
end;
Result := self;
end;
function TManagedObject.Detach : Integer;
begin
Result := InterlockedDecrement(FManagementCount);
end;
procedure TManagedObject.Free;
begin
if Detach>0 then
Exit;
Inherited;
end;
end.