假设我的单位中有这种代码:
TClass = class(tobject)
// ... implementation ...
end;
TControl = class(tobject)
private
FCheck: TClass
public
constructor Create(value: TClass);
// ... implementation...
end;
constructor TControl.Create(value: TClass);
begin
FCheck := value;
end;
正如您所看到的,控件类将在构造函数中使用TClass
作为参数,因此我需要执行以下操作:
//The 'a' is a TClass that has already been created
c := TControl.Create(a);
try
//... do what I need ...
finally
c.Free;
end;
这是非常基本的:我将使用a
作为构造函数的参数,但我无法理解我所做的事情是否安全。我有内存泄漏吗?
在构造函数中我做FCheck := value
,我猜它是正确的,因为我传递了对象的引用。我是否必须在TControl中实现析构函数以释放FCheck
?我无法理解我是否正确管理了FCheck对象。
答案 0 :(得分:3)
不,你不需要在类中销毁这个对象,假设它已经有来自其他地方的所有者。然而,它实际上拥有它100%,但它应该只有一个所有者。含义,一个负责该实例生命周期的类。这一切都取决于您的具体要求。它最初可能在一个地方拥有,然后在某些时候你可以将所有权转移到其他地方。在您的情况下,可以将其传递给此构造函数,然后考虑所有者。如果是这种情况,那么是的,您确实需要从类中销毁它。但同样,它应该在任何给定时间只有一个所有者。