情况
我正在学习Marco Cantu的Delphi书,并且已经有Java和PHP的面向对象编程经验。为了更好地理解书中内容,我做了这个测试:
type
TFraction = class
private
number: double;
num, den: integer;
fraction: string;
function hcf(x: integer; y: integer): integer;
public
constructor Create(numerator: integer; denominator: integer); overload;
constructor Create(value: string); overload;
function getFraction: string;
end;
这是一个非常简单的类,可以将十进制数转换为分数。我不包括定义构造函数和函数的其他部分,因为它们对我的问题没有用处。我使用以下方式创建对象。
var a: TFraction;
begin
a := TFraction.Create(225, 35);
ShowMessage(a.getFraction);
//The output of ^ is 45/7
a.Free;
end;
问题
根据我所学到的知识,我知道在使用完对象后必须要将其清除并且实际上我在使用 Free
。通过这种方式,我释放了内存并避免了内存泄漏。
另外,我还看到我有可能覆盖一个 destructor
。我不太理解 Free
和 Destroy
的行为。当我需要摆脱不再需要的对象时,我使用 Free
。当我重写一个析构函数时,我可以释放对象并执行其他操作?
简而言之,什么时候使用 Free 是好的?我何时应该优先选择 Destroy?