Ich versuche, das Http-Objekt in der Prozedur "FreeAndNilHttp" freizugeben und nil, aber nach dem Aufruf von FreeAndNilHttp wird das Objekt nicht frei und nil'd. Ist es unmöglich, eine Variable, die an eine andere Methode/Prozedur übergeben wurde, zu nullen?Delphi nil Object in anderen Methode
Beispielcode:
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;
Sie übergeben einen Zeiger auf ein Objekt nach Wert. Das Objekt wird freigegeben, aber der ursprüngliche Zeiger ist nicht Null. –
Was ist falsch daran, dieses Verfahren zu entfernen und Http.Free zu schreiben? Warum die Besessenheit, das Nichts zu vernichten, das sowieso verschwinden wird. Warum fühlen Sie sich verpflichtet, IOHandler zu zerstören? Willst du das nicht zerstören? Oder genießt du es einfach nur, Dinge wieder und wieder zu spritzen? –
Ihr Code ist eine Verschwendung von CPU-Zyklen. Die lokale Variable 'Http' geht am Ende des Button-Click-Handlers aus dem Gültigkeitsbereich, so dass der Code den IOHandler freigibt und auf Null setzt sowie die Variable auf Null setzt (und damit den gesamten Aufruf von' FreeAndNilHttp') sind bedeutungslos. Der Aufruf von "Http.Free" am Ende des Button-Klick-Handlers führt das Gleiche ohne den gesamten verschwendeten Code und Overhead aus. Mit "Http: = TIdHTTP.Create (nil); versuch .... endlich Http.Free; Ende; '. –