TMyClass = class(TObject)
private
FMyObject: TObject;
function GetMyObject: TObject;
public
property MyObject: TObject read GetMyObject write FMyObject;
end;
function TMyClass.GetMyObject: TObject;
begin
if FMyObject = nil then
FMyObject := TObject.Create;
Result := FMyObject;
end;
有时,“MyObject”不是在内部创建的,而是在外部创建并分配给该参数的。如果此对象是在外部创建的,则无法在这种情况下释放它。
我应该创建一个TList并在内部创建的所有对象中添加并销毁析构函数上的所有对象吗?
是否在内部创建参数,如何控制其生存期?您建议做什么?有什么模式可以做到这一点吗?
最佳答案
我会在属性 setter 中设置一个标志
procedure TMyClass.SetMyObject(AObject: TObject);
begin
if Assigned(MyObject) and FIsMyObject then
FMyObject.Free;
FIsMyObject := False;
FMyObject := AObject;
end;
function TMyClass.GetMyObject: TObject;
begin
if FMyObject = nil then
begin
FMyObject := TObject.Create;
FIsMyObject := True;
end;
Result := FMyObject;
end;
Destructor TMyClass.Destroy;
begin
if FIsMyObject then
FMyObject.Free;
end;
关于delphi - 哪种是控制对象字段类型生命周期的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6571437/