是这样的type
  Tdata0 = Class
    a:array[1..1000000] of integer;
  end;type
  Tdata = Class
    d:Tdata0;    
  end;
Tdata的一个对象 data 作为一个表单的成员(form1.data),在表单创建事就创建该类。在表单注销时就 Free掉。
form1.data的成员d也在TData创建时创建。但我发觉关闭表单时(不是退出程序),form1.data.a并未释放掉。请问如何释放呢?听说一句很常见的原则,谁创建谁释放,那么,data.a应该有Tdata来释放,我重载了Tdata的Free函数,在这个函数中释放,但报错。请问该如何办?

解决方案 »

  1.   

    你只需释放  d:Tdata0;   就好了 ,
    a:array[1..1000000] of integer; 有系统管理,自动释放的
      

  2.   

    这是静态数组,1000000个元素都分配在类实例的空间内,不是指针,释放类实例的时候都释放了,不用你自己释放。需要自己释放的情况下,在Destroy方法内释放,通常Free是一个编译器识别的方法 (它等效于if Assigned(类实例) then 类实例.Destroy;),并不真的存在(当然你也可以实现一个叫Free的方法,这也是允许的)。
      

  3.   

    我直到可以不释放a
    我的意思是  d:Tdata0 未被释放。自然那个数组就不能被释放了。
    怎样释放  d:Tdata0 的问题,是不是释放了 form1.data , d:Tdata0就自动释放了。
      

  4.   

    嗯,重载Destroy函数。destructor Destroy; override;//。。destructor Tdata.Destroy;
    begin
      self.d.Destroy;
      inherited Destroy;
    end;怎样就OK了。谢谢。