其他方法中的Delphi nil Object

Cha*_* M. 2 delphi null object

我尝试在程序"FreeAndNilHttp"中释放并取消Http对象,但在调用FreeAndNilHttp之后,该对象不是free'd和nil'd.是否无法将传递给另一个方法/过程的变量赋值?

示例代码:

procedure FreeAndNilHttp(Http: TidHTTP);
begin
  Http.IOHandler.Free;
  Http.IOHandler := nil;
  Http.Free;
  Http := nil;
  // Http is in this procedure nil
end;

procedure TForm3.Button1Click(Sender: TObject);
var Http: TidHTTP;
begin
  Http := TidHTTP.Create;
  // ... create IOHandler and more stuff...

  FreeAndNilHttp(Http); // <- not working
  // Http is not nil
end;
Run Code Online (Sandbox Code Playgroud)

NGL*_*GLN 9

TidHTTP后面的实例Http变量是调用后释放,但Http变量本身确实不为零.这是因为您按传递变量.这意味着Http例程中的参数指向同一个对象,但不指向同一个变量.为了能够使Http声明的变量为零TForm3.Button1Click,您需要将FreeAndNilHttp例程的签名更改为:

procedure FreeAndNilHttp(var Http: TidHTTP);
Run Code Online (Sandbox Code Playgroud)

现在您可以通过引用传递Http变量.

但这不是必要的,因为当该例程结束时,该Http变量TForm3.Button1Click将消失.