我尝试在过程“FreeAndNilHttp”中释放和清零 Http 对象,但在调用 FreeAndNilHttp 之后,该对象未被释放和清零。 是否不可能将传递给另一个方法/过程的变量设为 nil?
示例代码:
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;
最佳答案
Http
变量后面的 TidHTTP
实例在该调用后被释放,但 Http
变量本身确实不是 nil。这是因为您通过值 传递变量。这意味着例程中的 Http
参数指向同一个对象,但不是同一个变量。为了能够将 TForm3.Button1Click
中声明的 Http
变量设为 nil,您需要将 FreeAndNilHttp
例程的签名更改为:
procedure FreeAndNilHttp(var Http: TidHTTP);
现在您可以通过引用 传递Http
变量。
但这不是必需的,因为当例程结束时,TForm3.Button1Click
中的 Http
变量将消失。
关于其他方法中的Delphi nil对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846240/