type 
    TMyDate   =   class 
        Month,   Day,   Year:   integer; 
        procedure   SetValue(m,   d,   y:   integer); 
        function   LeapYear:   boolean; 
end;  
-------------------程序1---------------------------
T.procedureA;
begin
      Var   MyDate:   TMyDate;
     try
         procedureB(var MyDate:TMydate);
     finally
          MyDate.free;
     end;
end;
T.proceudreB(var MyDate:TMydate);
begin
     MyDate:=TMydate.create();
     ......
end;
-------------------程序1----------------------------------------------程序2---------------------------
T.procedureA;
begin
      Var   MyDate:   TMyDate;
      MyDate:=TMydate.create();
     try
         procedureB(var MyDate:TMydate);
     finally
          MyDate.free;
     end;
end;
T.proceudreB(var MyDate:TMydate);
begin
          ......
end;
-------------------程序2---------------------------请问各位大侠,程序1与程序2的效果是否一样?
程序1中Var   MyDate:   TMyDate定义有没有分配地址空间?MyDate是否能成功释放?谢谢

解决方案 »

  1.   

    程序1中Var MyDate: TMyDate定义有没有分配地址空间?
    这个问题问得不清楚。不明白你的意思。
      

  2.   

      当定义MyDate这个变量时有没有分配地址?还是在TMyDate.create()时才为它分配地址空间?
      

  3.   

    也就是说对象变量,是在定义时分配内存空间,还是在调用create时分配内存空间?
      

  4.   

    我的理解,对象变量是一个指向元类的指针,所以定义时未分配内存空间。create 之后创建实例才分配内存空间。
    普通就量定义之后运行时就被初始化,分配变量。
      

  5.   

       你好,如果定义变量时没有分配的话,那过程procedureB中的MyDate:=TMydate.create()就不会传递给procedureA中的MyDate了,程序1中Mydate对象释放也会有问题,请帮忙解答,谢谢!
      

  6.   

    var定义时只是分配了一个4B大的指针,即MyDate,事实上MyDate只是一个Pointer,它即将指向真正的类实例空间,而类实例空间只有在create时才分配。。就是这样