gpt4 book ai didi

delphi - 没有 override 指令的析构函数

转载 作者:行者123 更新时间:2023-12-03 15:05:37 25 4
gpt4 key购买 nike

这段代码有什么问题:

type
TobjAvisos = class
public
constructor Create;
destructor Free;
end;

implementation

constructor TobjAvisos.Create;
begin
inherited Create;
end;

destructor TobjAvisos.Free;
begin
inherited Destroy;
end;

它编译时没有警告,但 FixInsight 返回警告:“W522 析构函数没有覆盖指令”

最佳答案

问题是您需要重写虚拟析构函数Destroy。该虚拟析构函数是由非虚拟方法Free 所调用的。

就目前情况而言,销毁类的唯一方法是直接调用析构函数。但 Delphi 类预计支持通过 Free 方法销毁。

你的类应该是这样的:

type
TobjAvisos = class
public
constructor Create;
destructor Destroy; override;
end;

重写虚拟析构函数Destroy是使您的类与Free方法正常工作的唯一方法。

现在,使用虚拟析构函数Destroy和支持Free有两个主要原因:

    可以在 nil 对象引用上安全地调用
  1. Free。析构函数不能。这对于异常处理的对象构造机制至关重要。
  2. 支持Free允许安全地销毁对象,即使对象的运行时类型比对象引用的编译时类型更派生。

可以在这里找到一些有关相关主题的有用读物:Why should I not use "if Assigned()" before using or freeing things?

关于delphi - 没有 override 指令的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30515186/

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