【发布时间】:2012-05-25 14:11:43
【问题描述】:
鉴于以下 Delphi 代码,Foo 是 Free'd on FormClose,但 TFoo.Destroy 没有被调用 - 因此 Bar 不是 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;
【问题讨论】:
-
析构函数 Destroy(); 覆盖;哎呀。
-
编译器没有警告过你的代码吗?它应该有。关于隐藏同名虚拟方法的一些事情。
-
永远不要忽略警告。在许多情况下,忽略警告就是忽略错误!
标签: delphi memory-leaks destroy