Delphi关于析构函数destroy的用法?

destructor TMan.destroy; {从祖先继承一个析构函数}
begin
inherited destroy; 
end;
然后在用AMan:= TMan.create;创建对象
执行AMan.destroy;会出现什么情况?

此时AMan被销毁了吗,为什么此时AMan<> nil?
明白AMan.Free的作用,问题是现在想知道 
AMan.destroy;后为什么还会AMan<> nil?

蝴蝶不菲
浏览 1257回答 2
2回答

森林海

调用:AMan.Free会比AMan.destroy安全,这两个方法都不会将变量置为nil;常规写法是FreeAndNil(AMan);这个函数除了执行对象的Free,还要将变量置为nil;

肥皂起泡泡

Free方法实际上是调用的Destroy:procedure TObject.Free;beginif Self <> nil thenDestroy;end;Free 首先检查对象指针是否为nil, 因此更安全. 而 Destroy只是释放了对象所分配的内存, 并不将对象指针置为nil, 需要手动设置: AMan = nil;所以一般这样做法是较安全的: FreeAndNil(AMan);
打开App,查看更多内容
随时随地看视频慕课网APP