鉴于以下 Delphi 代码,Foo
is Free
'd on FormClose
, but TFoo.Destroy
没有被调用 - 因此Bar
is not Free
d,导致内存泄漏?
我是否在这里错过了一些东西,或者 Foo.Free 在某个时候不应该调用 Foo.Destroy ?
type
TBar = class
SomeInteger : integer;
end;
TFoo = class
Bar : TBar;
constructor Create();
destructor Destroy();
end;
var
Foo : TFoo;
implementation
constructor TFoo.Create;
begin
Bar := TBar.Create;
Bar.SomeInteger := 2;
end;
destructor TFoo.Destroy;
begin
Bar.Free;
Bar := nil;
showmessage('Destroyed!');
end;
procedure TForm10.FormCreate(Sender: TObject);
begin
Foo := TFoo.Create;
showmessage('Foo created');
end;
procedure TForm10.FormDestroy(Sender: TObject);
begin
Foo.Free;
Foo := nil;
end;
您必须用 override 标记析构函数的签名。
destructor Destroy(); override;
你应该有inherited
在析构函数的末尾。但由于您的类不是从 TObject 以外的任何对象派生的,我怀疑这并不重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)