加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:23:44 所属栏目:大数据 来源:网络整理
导读:这段代码有什么问题: type TobjAvisos = class public constructor Create; destructor Free; end;implementationconstructor TobjAvisos.Create;Begin inherited Create;end;destructor TobjAvisos.Free;begin inherited Destroy;end; 它编译没有警告,但Fi
这段代码有什么问题:
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有两个主要原因:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读