但是为了可靠性和可读性,这个Free最好不要省。
而且还要用try...finally...end装起来。
这样即使你在过程中出现异常,也能保证资源能够释放。
而且还要用try...finally...end装起来。
这样即使你在过程中出现异常,也能保证资源能够释放。
解决方案 »
- 程序自动退出是怎么回事
- 电脑中毒了,用压缩软件压一压能不能把病毒压死?
- 50分请教个简单问题:这个EDIT后面还有个按钮 怎么作的 ( 积分:50, 回复:0, 阅读:0 )
- 请问谁知道TreeView的底层实现方式.讨论一下.
- 关于倒计时(使用listview)
- 使用IHTMLDocument2的困惑
- fastreprt4 中怎么处理被除数为0的情况。
- simple question!
- 怎样利用TStream读取可执行文件中的图片?如一些安装程序,屏幕保护程序等。
- 在COMBOBOX和DATETIMEPICKER控件中,怎么实现点击下拉按纽无反应?
- 如何循环控制多个Button?
- 关于datetimepicker的一个问题
但是如果形如x := TX.Create(Application)这样,可以不Free,那么在Application被Free时,Application会替你free的。
可参考vcl之Tcompoment.Destory 方法的源码.
所以必须释放,而在c中类实例可以在栈中声成
所以到}可以自动释放,如用new生成的对象,也就是堆中,也必须释放,即delete
如在c++builder中你可以声明一个类,
如
class a
{
public:
a(){ShowMessage("constructor");}
~a(){ShowMessage("destructor");}
}
在一过程里 声明 a temp;你就可以知道了,当然类似TList的类,可以在析构函数中释放其内容
那么我手工建立对象会自动释放吗?
不过我喜欢手工做。
Tlist我也知道一定要释放,可我想知道的是,在Delphi中如果我只是简单的create之后做了一些事,然后就碰上了子过程的end;那还需要free吗?
1. CObject aObject;
2. CObject* pObject; pObject = new CObject;第一种与普通的变量类似,是在堆栈中生成的,如果超出了它的作用域,系统会自动释放的。
第二种是在堆中生成的,你所定义的变量只是一个指针,所以当你不再需要她的时候,delete她delphi(应该是Object Pascal)中没有第一种对象,所有以形式(var aObject : TObject)定义的变量都是指向真实对象的引用(这和java是相同的),引用其实就是一种指针,所一当你确认对象无用时free她,vcl中的标准组件好像推荐使用.Destory。另外vcl组件在释放时会先自动释放它的子组件。
。