对象的生命周期(20分)

  • 主题发起人 主题发起人 JackKen
  • 开始时间 开始时间
J

JackKen

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中的某段有
var
something:sthclass;
begin
something:=sthclass.Create;
......//不进行free;
end;
那么something生存到什么时候?
又或是
proceduredo
something(something:sthclass)
begin
something:=sthclass.Create;
......//不进行free;
end;
又会怎样?
 
你不进行free当然不会释放资源了
 
那他生存到什么时候。第一个procedure外的地方应该不能用something了,第二个procedure的something还可以用吗?问题是something(指针)的生存期和他的资源释放应该是两回事吧。若我一直都不Free到程序结束时资源总会被回收吧。
 
局部指针变量的有效期只在局部作用域内,
但有一点是肯定的,Delphi的对象都是需要释放的,
不管以什么方式被释放,如果不释放它,那么它一直会存在
对于长时间运行的程序,这是致命的
 
something只是一个类类型的变量而已,他指向sthclass.Create创建的对象.
而something如果是局部的,生存期就是当函数执行完毕。
如果是全局的,就是单元被销毁的时候。
而那个sthclass.Create所创建的对象会一直生存到调用Free才会被释放
 
something:局部是一个指针变量。在退出过程的时候就释放了。
sthclass.Create开辟了一块内存区A。指向A的针something被释放了。
你再无法访问到这块内存区。
但这块内存区已经无法再用,至少在当前进程内是不可再用的了。
在进程结束后,通常操作系统会回收进程的所有内存资源。
我认为A也包括在内,同样会被操作系统回收。//这句话我还不是很确定
 
还有问题,第二个porcedure执行后,something是nil,那就是没获的资源。如何令something在第二个procedure中获得资源?
 
加上Var 关键字
proceduredo
something(var something:sthclass)
begin
something:=sthclass.Create;
......//不进行free;
end;
 
后退
顶部