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)
在TidHTTP后面的实例Http变量是调用后释放,但Http变量本身确实不为零.这是因为您按值传递变量.这意味着Http例程中的参数指向同一个对象,但不指向同一个变量.为了能够使Http声明的变量为零TForm3.Button1Click,您需要将FreeAndNilHttp例程的签名更改为:
procedure FreeAndNilHttp(var Http: TidHTTP);
Run Code Online (Sandbox Code Playgroud)
现在您可以通过引用传递Http变量.
但这不是必要的,因为当该例程结束时,该Http变量TForm3.Button1Click将消失.
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |