小编Jac*_*ton的帖子

在Delphi中,我可以使用被破坏的对象而不会出错!可能吗?

我正在尝试使用线程进行Web服务调用.出于这个原因,我定义了一个简单的对象,并从一个线程调用它的方法.

但我意识到在销毁该对象后我仍然可以使用它的方法而没有任何错误,它会返回正确的答案.怎么可能?你有什么评论吗?

// TThreadMethod is defined in Classes.pas 

TThreadMethod = procedure of object;


*********************
      Interface 
*********************

TMyObject = class(TObject)
  procedure DoSomething;
end;

TMyThread = class(TThread)
private
  FMethod : TThreadMethod;
protected
  procedure Execute; override;
public
  constructor Create(aMethod: TThreadMethod);
end;

*********************
   Implementation 
*********************

// I called the thread and destroyed the object immediately. 

procedure TForm1.Button1Click(Sender: TObject);
var
  aObject : TMyObject;
begin
  aObject := TMyObject.Create;
  TMyThread.Create(aObject.DoSomething);
  FreeAndNil(aObject); // Object itself was destroyed here.
end;

constructor TMyThread.Create(aMethod: TThreadMethod);
begin
  inherited Create(True);
  FreeOnTerminate := True; …
Run Code Online (Sandbox Code Playgroud)

delphi oop free

2
推荐指数
1
解决办法
263
查看次数

标签 统计

delphi ×1

free ×1

oop ×1