Object Pascal:从对象指针谈起

musicwind 2001-08-29 11:25:32
敬请关注《Object Pascal:从对象指针谈起》,参与讨论。
http://www.csdn.net/develop/article/10/10124.shtm
...全文
611 72 打赏 收藏 举报
写回复
72 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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,你不觉得烦阿,该结束的终归要结束
  • 打赏
  • 举报
回复
加载更多回复(52)
发帖
语言基础/算法/系统设计

1.6w+

社区成员

Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
帖子事件
创建了帖子
2001-08-29 11:25
社区公告
暂无公告