在aControl中调用aControl.free

Naj*_*jem 4 delphi events destructor

看完这个,我想知道什么是下一个代码问题:


procedure TForm1.Button5Click(Sender: TObject);
begin
  Button5.free;
end;
Run Code Online (Sandbox Code Playgroud)

Mas*_*ler 5

在该例程上放置一个断点并检查调用堆栈.从事件处理程序返回后,仍然会运行Button5的代码,以及其他需要Button5仍然存在的VCL代码.如果你从它下面删除对象,你很可能会以某种方式破坏内存或引发异常.

如果你想这样做,正确的方法是调用PostMessage并向表单发布一条消息,最终在当前代码运行完毕后安全地释放对象.