Действительно ли в Delphi нормально выполнять код после унаследованного вызова в деструкторе?Деструкторы Delphi: выполнение кода после унаследованного вызова?
Вы можете найти это в System.Classes:
destructor TThread.Destroy;
begin
[...]
inherited Destroy;
FFatalException.Free;
end;
Я думаю, что доступ к члену экземпляра после вызова унаследованного Уничтожьте методом является плохой идеей.
Я бы не подумал, что все в порядке. –
@JerryDodge: На самом деле это может быть очень необходимо. Например, когда вам нужно защитить деструктор от исключений и/или многопоточного исполнения. В этом случае вы почти всегда будете иметь код, который выполняется после унаследованного вызова. Также может потребоваться обеспечить жизнь экземпляров-членов, которые обслуживают обратные вызовы, которые могут быть вызваны из унаследованного деструктора. IOW: для этого может быть много причин, но я согласен с тем, что это действительно очень, очень, очень тщательно. –
Это так же корректно, как и создание вещей перед наследованным вызовом в конструкторе. Не общий, но действительный. Также TThread наследует от TObject, поэтому в этом унаследованном вызове ничего не происходит. –