其他方法中的Delphi nil对象

标签 delphi object null

我尝试在过程“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/

相关文章:

c# - 在 Parallel.For 内部调用的方法中 HttpContext 为 null

与 Delphi 7 相比,Delphi 2010 的 Canvas 透明度有何不同?

delphi - 从 TDictionary 类中获取所有键作为单个字符串

javascript - 通过另一个预定义的数组元素作为键来重构 JavaScript 对象数组

c# - View 在从区域中移除后未被处置

c++ - 是否存在堆分配对象的永不为空的唯一所有者?

Delphi 线条彩色文本组件替换 TRichEdit 以提高性能

delphi - 这怎么会是内存泄漏呢?

javascript - Javascript 构造函数中的私有(private)函数不可公开访问

ios - 检查自定义 == 运算符中的 nill 相等性