"FreeAndNilHttp"プロシージャでHttpオブジェクトを解放しないようにしようとしますが、FreeAndNilHttpを呼び出した後、オブジェクトはfreeおよびnilされません。 別のメソッド/プロシージャに渡される変数を無関係にすることはできませんか?Delphi 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;
オブジェクトへのポインタを値渡ししています。オブジェクトは解放されますが、元のポインタはnilではありません。 –
この手順を削除してHttp.Freeを書いて何が問題になりますか?とにかく消えようとしていることを何もしないようにすることに戸惑いがあるのはなぜですか。なぜあなたはIOHandlerを破壊するように強く感じるのですか? Httpを破壊しないだろうか?それとも何度も何かを吹きかけることを楽しんでいますか? –
あなたのコードはCPUサイクルの無駄です。ローカル変数 'Http'はボタンクリックハンドラの終了時に範囲外になります。そのため、IOHandlerを解放して変数をnilに設定し、変数をnilに設定する(したがってFreeAndNilHttpを呼び出す)無意味です。ボタンクリックハンドラの最後にある 'Http.Free'の呼び出しは、無駄なコードとオーバーヘッドがなくても同じことを実現します。あなたは 'Http:= TIdHTTP.Create(nil);でもっと多くのことを達成します。試してみよう。最終的にHttp.Free;終わり。 –