区别不大,只不过Free检查当前对象是否为空。你看看源代码: procedure TObject.Free; begin if Self <> nil then Destroy; end;看到了吧?就多了一个检查。
综楼上各位所说。 一般用FREE,不用DESTROY
Destroy是析构函数,Free不是,Free也是通过调用Destroy析构的,只不过在调用Destroy之前先检查当前对象是否为空。避免自己在代码重检查。 实际代码如下 procedure TObject.Free; begin if Self <> nil then Destroy; end; 不过对于重复调用Free还是会导致异常,因为系构后对象指针还是指向原来的地址,不会变为nil,所以建议用Freeandnil析构,这个函数在调用Free后还会把对象指针设置为nil,但对于多个指针指向同一个对象还是无能为力
当您使用完对象后,您应该及时撤销它,以便把这个对象占用的内存释放出来。您可以通过调用一个注销方法来撤销您的对象,它会释放分配给这个对象的内存。
Delphi的注销方法有两个:Destroy和Free。Delphi建议使用Free,因为它比Destroy更为安全,同时调用Free会生成效率更高的代码。
您可以用下列的语句释放用完的Employee对象:
Employee.Free;
和Create方法一样,Free方法也是TEmployee从TObject中继承过来的。把您的注销放在try…finally程序模块的finally部分,而把对象的程序代码放在try部分是编程的好习惯。这样,即使您的程序代码在使用对象时发生了异常事件,也会确保您为这个对象分配的内存会被释放。关于异常
处理和try…finally程序模块的信息以及建立非可视化对象的例子,在后文中还将仔细讲述。
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;看到了吧?就多了一个检查。
一般用FREE,不用DESTROY
实际代码如下
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
不过对于重复调用Free还是会导致异常,因为系构后对象指针还是指向原来的地址,不会变为nil,所以建议用Freeandnil析构,这个函数在调用Free后还会把对象指针设置为nil,但对于多个指针指向同一个对象还是无能为力
我再问一个问题
就是Oracle中的Select 语句调用Function时当Select 语句释放时Function还在运行?
为什么??????