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.析构函数不能.这对于异常处理的对象构造机制至关重要. 有关相关主题的一些有用的阅读可以在这里找到:Why should I not use “if Assigned()” before using or freeing things? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |