作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码有什么问题:
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
对象引用上安全地调用
Free
。析构函数不能。这对于异常处理的对象构造机制至关重要。 Free
允许安全地销毁对象,即使对象的运行时类型比对象引用的编译时类型更派生。 可以在这里找到一些有关相关主题的有用读物:Why should I not use "if Assigned()" before using or freeing things?
关于delphi - 没有 override 指令的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30515186/
我是一名优秀的程序员,十分优秀!