In Delphi, why does the Assigned() function still return True after I call the destructor?
The below example code will write \"sl is still assigned\" to the console.
Delphi VCL 'objects' are actually always pointers to objects, but this aspect is typically hidden from you. Just freeing the object leaves the pointer dangling around, so you should use FreeAndNil instead.
The "Mysterious Assembler" translates roughly to:
if Obj != NIL then
vmtDestroy(obj); // which is basically the destructor/deallocator.
Because Free checks for NIL first, it's safe to call FreeAndNil multiple times...