Hei,
Wat is eigenlijk het verschil tussen:
if Assigned(objekt) then Objekt.Free
en
FreeAndNil(Objekt) ?
Wanneer gebruik je het een en wanneer de andere vorm?
Kan iemand dat met bijv. een voorbeeldje duidelijk maken? Alvast bedankt.
Hei,
Wat is eigenlijk het verschil tussen:
if Assigned(objekt) then Objekt.Free
en
FreeAndNil(Objekt) ?
Wanneer gebruik je het een en wanneer de andere vorm?
Kan iemand dat met bijv. een voorbeeldje duidelijk maken? Alvast bedankt.
Als je Objekt.Free uitvoert, dan bevat Objekt daarna nog steeds een pointer naar het verwijderde object.
Dus eigenlijk is FreeAndNil(Objekt) gelijk aan
Objekt.Free;
Objekt := nil;
Maar niet helemaal, want FreeAndNil zet eerst de variabele op nil en voert daarna een Free uit. Gebruik FreeAndNil dus als je zeker wilt weten dat de variabele nil is na een Free (ook als er een exception in de free zou optreden).
Wanneer gebruik je nou Free en wanneer FreeAndNil? Als de variabele nil moet zijn gebruik je dus FreeAndNil. Je kunt zelf wel bedenken wanneer dat zo moet zijn, maar bijvoorbeeld als er ergens wordt gecontroleerd of die variabele nil is.
Marco Hemmes
Mocht je niet over een Delphi versie met source beschikken, dit is FreeAndNil:Code:procedure FreeAndNil(var Obj); var P: TObject; begin P := TObject(Obj); TObject(Obj) := nil; // clear the reference before destroying the object P.Free; end;
Marcel
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks