对象析构

一个静态声明的对象在离开它的作用域时自动调用它的析构方法,但要对动
态生成的对象手动调用析构方法。这个规则在Object Pascal中也是适用的,除了在Object Pascal
中的隐式动态创建的对象,所以一定要记住这个规则:凡是创建的,都需要释放。对这个规则
有两条重要的特例,第一条是当对象被其他对象拥有时(就像在第2 0章“V C L元素和运行期类型
信息”中介绍的一样),它将替你释放对象。第二种情况是引用计数的对象(像T I n t e r f a c e O b j e c t和
T C o m O b j e c t ),当最后一个引用释放时,它将被析构。

 

在Object Pascal中的类实例实际上是指向堆中的类实例数据的3 2位指针

 

当通过窗体的系统菜单或者窗体上的C l o s e按钮关闭这个窗体时,窗体并
没有真正从内存中释放。它仍然还在内存中,除非关闭了主窗体(即应用程序)。

 

 

http://topic.csdn.net/t/20040405/13/2926715.html

 var
  a : TForm2;
begin
   { m:=nil;
   if not Assigned(m) then
    ShowMessage('not Assigned')
   else
     ShowMessage('Assigned'); }
   if not Assigned(m) then
   m:=tForm2.Create(nil);
  m.Show;

原因:
局部变量   Form1   编译器初始化的时候不会将Form1设置为nil,而是一个随机值(所以非Nil)
全局变量会置为nil
而你的写法全部是判断是否是nil,所以得到的结果和你想象的不一样

posted on 2010-09-01 14:48  dengdeng  阅读(314)  评论(0编辑  收藏  举报

导航