Free的源码:
procedure TObject.Free;
begin
if Self <> nil then //当 对象 <> nil 的时候就调用Destroy释放对象
Destroy;
end;
FreeAndNil的源码:
procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj)
//用一个临时对象保存 对象的值Obj(其实是保存地址)
Pointer(Obj) := nil
//然后将 对象 赋值为 nil (即对象变量已经指向 nil)
Temp.Free
//然后释放对象
end;
如果要每一条语句都弄清楚的话得理解 对象指针, 平时我们使用的对象名如Form1 这些都是指针, 指针是一个变量, 他的值是内存中的地址, 平时说的指针指向某个地方就是指针的值是那个 地址 自己可以测试一下, 新建一个工程,
ShowMessage(IntToStr(Integer(Form1)))
这样就显示出 Form1这个对象在内存中的位置