Delphi析构函数: executing code after inherited call?

标签 delphi destructor

在 Delphi 中,在析构函数中继承调用之后执行代码真的可以吗?

您可以在 System.Classes 中找到它:

destructor TThread.Destroy;
begin
[...]
  inherited Destroy;
  FFatalException.Free;
end;

我认为,在调用继承的 Destroy 方法后访问实例成员是一个坏主意。

最佳答案

在调用继承的析构函数之后执行代码是完全安全的,只要该代码不依赖于已被继承的析构函数销毁的内容。同样,在调用继承的构造函数之前执行代码也是安全的,只要代码不依赖于该继承的构造函数中实例化的任何内容。

但这确实不是一种好的风格。有时,某些原因会导致您使用此类代码,但通常应将此类原因视为设计中存在问题的指示。

在您给出的示例中,根本不需要那样编写代码。对 FFatalException.Free 的调用完全可以在调用继承的析构函数之前发生。

关于Delphi析构函数: executing code after inherited call?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17296001/

相关文章:

excel - 在 Delphi 中检测 Excel 的版本

c++ - 赋值运算符改变赋值对象的值

c++ - 在 C++ 中销毁动态分配的内存(数组对象)

c++ - 为什么在 C++11 中不删除具有副作用未定义行为的析构函数的对象?

c++ - 不销毁作为 union 成员的类类型的对象是否安全?

c++ - 删除的析构函数有什么意义?

image - Delphi StringGrid 背景图片

delphi - 项目加载速度更快

mysql - 系统启动时的应用

delphi - Delphi XE2 中可以使用 pdb 文件吗?