【发布时间】:2012-04-02 23:24:03
【问题描述】:
我想知道为什么在我调用Free 方法后对象不是nil。
我的意思例如下一节课:
type Ta = class(TObject)
public
i: integer;
destructor Destroy; override;
end;
destructor Ta.Destroy;
begin
inherited;
end;
procedure Form1.Button1;
var a: Ta;
begin
a := Ta.Create;
a.Free;
if a = nil then
button1.Caption := 'is assigned'
else
button1.caption := 'is not assigned';
end;
我的问题是为什么释放对象后不是 nil 以及如何在不使用 a := nil 的情况下在析构函数后将 a 变为 nil?
【问题讨论】:
-
释放对象不会将其设置为零。使用 FreeAndNil(a)
-
你不能用析构函数来实现吗?
-
非常感谢您的快速响应!
-
如果我释放一个对象并在下一个源代码行中使用它,编译器应该会给我一些新鲜的咖啡:)
-
@user558126,对对象实例的任何引用(可能有很多)对于析构函数都是陌生的。因此,在您销毁一个对象后,所有引用都将变得无效,并且您可以响应将它们重置为零。例如:如果你和另一个
var a1: Ta并复制指针a1 := a在你调用FreeAndNil(a)后它将变成一个悬空的指针
标签: delphi memory free destructor