在 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/