对象创建及按地址传递
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是否能成功释放?谢谢
[解决办法]
效果一样,至于是否能成功释放要看过程怎么写;用第2种吧,在那里创建,就在那里释放
[解决办法]
1、效果一样。
2、释放没问题。
一般写法用第2种。
理解对解、指针就不难明白了。
[解决办法]
var定义时只是分配了一个4B大的指针,即MyDate,事实上MyDate只是一个Pointer,它即将指向真正的类实例空间,而类实例空间只有在create时才分配。。就是这样