Object Pascal:从对象指针谈起

musicwind 2001-08-29 11:25:32
敬请关注《Object Pascal:从对象指针谈起》,参与讨论。
http://www.csdn.net/develop/article/10/10124.shtm
...全文
656 72 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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,你不觉得烦阿,该结束的终归要结束
加载更多回复(52)

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧