W
wddark
Unregistered / Unconfirmed
GUEST, unregistred user!
闹鬼闹鬼 一个类没有create 竟然能部分正常使用?????
用delphi时间也不算短了 ,今天调试的时候遇到一个很有意思的问题,大家一起讨论。
我的开发环境:win2k sp4 ,d6+update2
type
PTestObj=^TTestObj;
TTestObj=class(TStringlist)
public
procedure showmsg(AMsg:string);
end;
showmsg就是showmessage一下 ,都没有什么。
然后请看搞笑的代码
procedure TFrmMain.Button1Click(Sender: TObject);
var
pTestObj;
t:TTestObj;
begin
//注意没有t:=TTestObj.create;
t.showmsg('aaa');
//t.text:='aaa'
//暂时去掉这行代码
p:=@t;
showmessage(inttostr(integer(p)));
t.free;//这行会报错
end;
大家可以试试看 如果去掉t.free竟然可以一切正常的执行!
加上t.free反而会报错
p我看到了不是nil也就是说确实是存在这个对象的!
这。。。这是什么道理??
另外原来TTestObj是继承于TObject的,一样不需要create也可以使用!
继承于TStringlist之后如果执行t.text:='aaa'
会报错!本来就应该错,但是 t.showmsg('aaa')还是正常的。
所以我觉得很奇怪,如果解释为delphi的特殊机制会自动create,那么t.text:='aaa'也不应该有错,free更不应该有错
如果解释为根本没有create!那么t.showmsg('aaa');怎么可能正常执行!昏啊昏
各位说说看是怎么回事啊
用delphi时间也不算短了 ,今天调试的时候遇到一个很有意思的问题,大家一起讨论。
我的开发环境:win2k sp4 ,d6+update2
type
PTestObj=^TTestObj;
TTestObj=class(TStringlist)
public
procedure showmsg(AMsg:string);
end;
showmsg就是showmessage一下 ,都没有什么。
然后请看搞笑的代码
procedure TFrmMain.Button1Click(Sender: TObject);
var
pTestObj;
t:TTestObj;
begin
//注意没有t:=TTestObj.create;
t.showmsg('aaa');
//t.text:='aaa'
//暂时去掉这行代码
p:=@t;
showmessage(inttostr(integer(p)));
t.free;//这行会报错
end;
大家可以试试看 如果去掉t.free竟然可以一切正常的执行!
加上t.free反而会报错
p我看到了不是nil也就是说确实是存在这个对象的!
这。。。这是什么道理??
另外原来TTestObj是继承于TObject的,一样不需要create也可以使用!
继承于TStringlist之后如果执行t.text:='aaa'
会报错!本来就应该错,但是 t.showmsg('aaa')还是正常的。
所以我觉得很奇怪,如果解释为delphi的特殊机制会自动create,那么t.text:='aaa'也不应该有错,free更不应该有错
如果解释为根本没有create!那么t.showmsg('aaa');怎么可能正常执行!昏啊昏
各位说说看是怎么回事啊
代码: