这样的情况DELPHI会自动释放内存吗?(50分)

  • 主题发起人 主题发起人 demogorgon
  • 开始时间 开始时间
D

demogorgon

Unregistered / Unconfirmed
GUEST, unregistred user!
ACLASS = class
private
fMember: array of BClass;
end;

procedure Test;
begin
a = AClass.Create();
//do something
end;
在函数/过程结束的时候,系统会自动释放所有创建的变量吗?
如果使用指针呢?或者说在什么情况下需要我们手工释放内存?
 
不会,需要手工释放内存。
 
这里 a是不会被自动释放的,FMember会在AClass被Destroy时被自动释放
一个简单的原则,谁创建、谁管理,当然也就是谁释放了。
 
当程序流程走到变更a作用范围外时,如果没有出现异常的话,会自动释放,但如果出现异常就
必须手工释放所以一般在程序中用TRY..EXCEPT来保证在出现异常情况下也能正常退出.
a = AClass.Create();
try
//do something
except
a.free
end;
 
同意windbell!
 
不同意楼上的,应该这样写
try
a := AClass.Create();
try
//使用....
finally
a.Free;
end;
except
//错误处理
end;
 
最好是自己释放资源,还有如果这个类的拥有者是一个窗体,
那么你可以不用释放这个资源,程序关闭的时候只动释放这些
资源
 
我们是想保证资源的释放,得到想要的错误处理,而不是要捕捉所有的错误,否则的话,在程
序一开始就用TRY那不是更好?
 
Delphi 在构造方法或者AfterConstruction方法中如果出现异常,
他会自动调用析构方法的, 这一点与C++不同. 还有如果要确保资源释放应该用
try
...
finally
...
end;
而不是
try
...
except
...
end;
 
多人接受答案了。
 
后退
顶部