买了本Delphi面向对象编程思想,正在看,产生些问题。
1:第33页说,Delphi通过调用类的一个构造函数来建立一个对象的实例,对象至少有一个create()的构造函数,使用时候写MyObject:=TmyObject.create即可。
   但是第37页说,在方法的分类中有一项为构造方法。
   Type 类名= class(基类)
      constructor 构造方法名(参数)
      ...
    constructor create 和 create 有什么区别?
    前者是否是Create的用户定义实现构造,而后者是用Tobject的默认方法实现构造?2者是否牵扯到重名的覆盖问题?
    
2:  38页又谈到析构方法,那么问题同上,
   destructor destroy 和 destroy 有什么区别?
3:38页“不要在程序中调用destroy来销毁对象,而应该用free”
   这句话看不懂。有什么区别?书上一句话就带过去了。   

解决方案 »

  1.   

    楼主可以看看李维的《InsideVCL》
      

  2.   

    construtor是类的构造方法
    create 是实例的构造方法
      

  3.   

    1.construtor是类在定义的时候要写的,这样可以让人知道这是构造函数 
    create时示例在构造的时候写的,
    2.destroy 同 create
    3.当您使用完对象后,您应该及时撤销它,以便把这个对象占用的内存释放出来。您可以通过调用一个注销方法来撤销您的对象,它会释放分配给这个对象的内存
    Delphi的注销方法有两个:Destroy和Free。Delphi建议使用Free,因为它比Destroy更为安全,同时调用Free会生成效率更高的代码。
    您可以用下列的语句释放用完的Employee对象: 
    Employee.Free;和Create方法一样,Free方法也是TEmployee从TObject中继承过来的。把您的注销放在try…finally程序模块的finally部分,而把对象的程序代码放在try部分是编程的好习惯。这样,即使您的程序代码在使用对象时发生了异常事件,也会确保您为这个对象分配的内存会被释放。
    二者的区别是,Destroy会直接释放对象,而Free会事实检查该对象是否存在,如果对象存在,或者对象不为nil,它才会调用Destroy。因此,程序中应   
    该尽量使用free来释放对象,这样更加安全一些。(但要注意,free 也不会自动将对象置为nil,所以在调用free之后,最好是再手动将对象置为nil。)
    TObject类有一个虚拟的Destroy虚构函数和一个非虚拟的Free函数。Free函数中是调用Destroy的。因此,当我们对任何对象(都是TObject的子类对象)调用.Free();之后,都会执行TObject.Free();,它会调用我们所使用的对象的析构函数Destroy();。这就保证了任何类型的对象都可以正确地被析构。