构造函数中的Delphi对象引用

时间:2017-02-02 23:34:02

标签: delphi

假设我的单位中有这种代码:

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对象。

1 个答案:

答案 0 :(得分:3)

不,你不需要在类中销毁这个对象,假设它已经有来自其他地方的所有者。然而,它实际上拥有它100%,但它应该只有一个所有者。含义,一个负责该实例生命周期的类。这一切都取决于您的具体要求。它最初可能在一个地方拥有,然后在某些时候你可以将所有权转移到其他地方。在您的情况下,可以将其传递给此构造函数,然后考虑所有者。如果是这种情况,那么是的,您确实需要从类中销毁它。但同样,它应该在任何给定时间只有一个所有者。