【发布时间】:2011-09-28 02:58:57
【问题描述】:
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 并添加所有内部创建的对象并销毁析构函数上的所有内容吗?
如果参数是在内部创建的,我如何控制它的生命周期?你建议做什么?有什么模式可以做到这一点吗?
【问题讨论】:
-
如果 MyObject 具有私有访问修饰符,如何在外部创建它?除了这个类没有看到这个属性
-
@heximal:最有可能(不在示例代码中)通过构造函数注入。
-
@heximal:该字段是私有的,该属性是公共的,可读写,即可以像
Obj.MyObject := TSomeObject.Create;一样使用。 -
你是对的,对不起,没有注意到属性声明
-
@ain 在这种情况下,之前由 Getter 创建的 FMyObject 实例引用将不复存在。所以@Eduardo,你的财产应该有一个setter。