Object.free和Object:=nil有什么異同呢,好象Object.free 后 Assigned(Object)= True 啊?(30分)

  • 主题发起人 主题发起人 小師妹
  • 开始时间 开始时间

小師妹

Unregistered / Unconfirmed
GUEST, unregistred user!
請教師兄啦!
 
if assigned(object) then
object.free
else
object:=nil;
 
BianLx错了, 你的代码如果Object Free了, 会出问题
Object.Free;
if Assigned(Object) then
ShowMessage('Always assigned')
肯定能显示MessageBox,
Object := nil 将对象指针清0, 如果Object是接口的实现对象, 调用_Release(), 一般实现对象在_Release会判断是否RefCount=0,是调用Object.Free,当然也可以不调用,例如Component
Object.Free 调用Object.Destroy方法, 但是之前判断是否为nil.
 
Object.free把Object拥有的内存释放,此时Object仍指向原来的空间,Object:=nil后,
可确定Object为空,不然,可能引起访问冲突
 
一个对象名就是一个指向对象所在内存的指针
你创建了一个对象,它存在于内存中,Free把这片内存释放掉!
但指向这块内存的指针还是存在,而nil把指针也结清空了!
不然这个指什就成了野指针了!
 
如果确定对象以存在,可以调用FreeAndNil(object);将对象的内存释放,
指向对象的指针销毁。
 
那release 与free什么区别呢?
 
Free 后不会被置为 nil, 可在 Free 后手动设置
而 Assigned 是判断是否为 nil 而不是判断是否 Free
 
謝謝各位師兄了,給分,就是太少了點啊,誰叫我是新手呢?
 
后退
顶部