gpt4 book ai didi

delphi - 为什么不调用 Destroy?

转载 作者:行者123 更新时间:2023-12-03 14:55:02 26 4
gpt4 key购买 nike

给定以下 Delphi 代码,FooFormClose 上是 Free,但 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;

最佳答案

必须用 override 标记析构函数的签名。

destructor Destroy(); override;

并且您应该在析构函数的末尾添加inherited。但由于您的类不是从 TObject 以外的任何对象派生的,我怀疑这并不重要。

关于delphi - 为什么不调用 Destroy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10755942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com