Object Pascal:从对象指针谈起

musicwind 杭州网梭科技有限公司 产品线研发负责人  2001-08-29 11:25:32
敬请关注《Object Pascal:从对象指针谈起》,参与讨论。
http://www.csdn.net/develop/article/10/10124.shtm
...全文
593 点赞 收藏 72
写回复
72 条回复
musicwind 2001年09月28日
to BigBen(江南草):
你好,谢谢参与讨论。
但是你说的"对象引用是个类类型的变量,是个指向类(不是对象!)的虚拟方法表(VMT)的指针。"我不太赞同。
建议看看文章《Delphi对象模型(Part I) 》--翻译自《Delphi In a NutShell》,可能
会得出更好的结论。
《Delphi对象模型(Part I) 》
http://www.csdn.net/develop/read_article.asp?id=10403
回复 点赞
qiandeng 2001年09月25日
关注
回复 点赞
starmedia 2001年09月25日
真是受益非浅,不过我还是较赞同Nicrosoft(奈软)(生活就是折腾) 的观点。
回复 点赞
BigBen 2001年09月25日
对象引用是个类类型的变量,是个指向类(不是对象!)的虚拟方法表(VMT)的指针。(不同的类,在内存中有不同的位置,哪怕它们的实现完全一样。)
类数据类型很象记录类型,但起始是个32位的指向虚拟方法表的指针,然后是各种属性数据,如同记录,虚拟方法表在后。
回复 点赞
byrybye 2001年09月25日
to Musicwind(ShutUp:Boolean) :你好,我来帮你推,
 
回复 点赞
musicwind 2001年09月24日
up
回复 点赞
nnit 2001年09月24日
gz
回复 点赞
musicwind 2001年09月24日
to title:
指针,就是一个地址,广义的说,Delphi中到处充斥指针。
比如最常见的"Form1: TForm1; ",可以认为是对象引用,但是对象引用实质上是指针的一种)。
回复 点赞
gwbasic 2001年09月13日
listen
回复 点赞
title 2001年09月13日
感觉指针在DELPHI用的不多呀!这好象在C中使用的多些!
回复 点赞
lance 2001年09月12日
gz
回复 点赞
BigBen 2001年09月10日
to Musicwind(ShutUp:Boolean);-):
如果按你的说法,tih既是接口引用,又是对象引用?
接口是被记数的引用,在接口建立时其引用记数为1,在调用结束调用release过程,若引用数为0,则销毁对象。在Eric Harmon的〖delphi com深入编程〗里讲,as会隐性调用addref,(再调用release,一般的将)导致接口对象的销毁。他这个意思我想主要还是想说,对象引用和接口引用并不同。
回复 点赞
Englishgenius 2001年09月07日
受益
回复 点赞
BigBen 2001年09月07日
Object Pascal太太含糊了,深入下去,发现很多东西都没明确。..
看这个程序片段:

var
iih:IHello; //一个接口interface
tih:TIhello;//实现此接口的类
begin
tih:=tIhello.create(1024); //1、
iih:=tih as IHello; //2、
iih.SayHello; //3、
tih.SetCaption('Hello,World~!'); //4、
tih.free; //5、
end;

这里第一句得到了一个实现接口的com对象,应该是个指针吧。
第二句强制转换,应该说,由于as操作符的副作用,引起了tih对象的销毁。(eric harmon的〖delphi com深入编程〗里就是如是说。)
可是第四句还能访问tih里定义的过程!这个过程没有在IHello里所定义的。
第五句出错,倒是好理解。可是为什么第四句就不出错?对象销毁,但是指针还在?
回复 点赞
byrybye 2001年09月07日
我认为,引用就是对象,是可以这么理解的。但引用和指针,也许很相近。
但我认为,这两个概念会越离越远。个人观点。呵呵。
Musicwind 我问你是不是程序员,没有别的意思。只是,想有人能教我(呵呵)
我想大家还是不要,在指针后面省略^。
个人观点,见笑
回复 点赞
musicwind 2001年09月07日
to BigBen(江南草):
iih:=tih as IHello; //2、
这句话不会引起对象的销毁,从后面的一句话 tih.SetCaption('Hello,World~!'); 依然正确的到了证明。
tih as IHello只是将取得了tih的接口将之赋给iih呀,没有什么副作用阿。
至于第五句出错也很正常,因为应当是调用 tih := nil;才对。

回复 点赞
musicwind 2001年09月07日
Let people go on talking as they like, and we will go on living as we think best
回复 点赞
Tense 2001年09月07日
受益
thanx.
回复 点赞
Tense 2001年09月03日
还是讨论一下吧,我还没有弄明白呢。
好象都有道理,但我认为form和form^是一样的。(见《Delphi开发员指南》一书)。
回复 点赞
Nicrosoft 2001年09月01日
没完没了的up,你不觉得烦阿,该结束的终归要结束
回复 点赞
发动态
发帖子
语言基础/算法/系统设计
创建于2007-08-02

3419

社区成员

3.3w+

社区内容

Delphi 语言基础/算法/系统设计
社区公告
暂无公告