a:=Ta.Create(application);
  try
    a.ShowModal;
  finally
    a.Free;
    a:=nil;
  end;
大家觉得这段代码有问题吗?帮忙翻译一下。

解决方案 »

  1.   

    a:=Ta.Create(application); //创建
      try 
        a.ShowModal;           //show出来
      finally                   
        a.Free;                //释放
        a:=nil;                //将a变量置空,避免野指针
      end; 
      

  2.   

    1. 编码风格不符合Delphi编码规范
    2. 类命名不能表达类的用途 (Ta)
    3. 参数命名不能表达参数用途 (a)修改如下:a := Ta.Create(application); 
    try 
      a.ShowModal; 
    finally 
      a.Free; 
      a := nil; 
    end; 
      

  3.   

    楼主的代码那样写没有什么问题1. Ta类能ShowModal,可见是一个创建类,最好创建给Ta的Parent
    2. a.free释放Ta的实例a占用的空间
    3. a := nil,是释放a的引用(这里可以理解成一个指针,指针本身也有空间占用)
    4. a := nil, 不写也没有关系,Delphi的编译器自动会将a的引用设置为nil (代码应该在一个方法内,方法运行结束后编译器做这个事情)
    5. 代码风格看来大家都不注意。代码风格问题需要引起重视,很多BUG和难以静态检查的错误都是由于代码风格引起的,特别是方法和函数内代码函数比较多、逻辑比较多的情况。
      

  4.   

    有个不算问题的问题就是把:
    a:=Ta.Create(application); 
    改成
    a:=Ta.Create(nil); 
    更好些,因为窗体是你自己释放的,如果参是appliction它会把自身实例加入appliction的Components列表里,当你Free掉的时候,它又会用appliction的Components里删掉。多做了无用的操作
      

  5.   

    15楼的说法有理。再有就是变量的取名上要有意义,不要 A B C D 之类。