哪位老大可以举例说明一下,这句话我怎么看也看不明白 :( (50分)

  • 主题发起人 主题发起人 zzjat
  • 开始时间 开始时间
Z

zzjat

Unregistered / Unconfirmed
GUEST, unregistred user!
"对象实例实际上是一个指针.当把一个对象赋给变量时,
其实就是当前实例的指针指向另一个对象,而原来的对象仍在内存中."

 
了解指针没有,它只是一个指向,并不是一个实体!
 
fun
var
o1,o2:tobject;
begin
o1:=tobject.create;
o2:=o1;
这时o1,o2是同一个对象
o2:=nil;
o1:=nil
那对象还在

end;
 
对象实例实际上是一个指针
(它是实例就有实体在内存中,访问对象的名字只是一个地址)
当把一个对象赋给变量时

var
Obj1,Obj2:TObject;
begin
Obj1:=TObject.Create;
//产生一个TObject的实例Obj1,此时的Obj2在内存中只有TObject的结构而没有其它。
//而Obj1是一个实例,它能干活,Obj2则不能。
Obj2:=Obj1;
//让Obj2的结构指针指向Obj1实例,此时Obj2和Obj1就是同一个东东了。
//因为它们指向了同一个地址,Obj1能干的Obj1就可以做。
Obj1:=nil;//让Obj1指向空,它就不再等同于Obj2了,但内存中的对象还在。Obj1不能干活了。
Obj2.Free;//将Obj2指向的对象清除,Obj2在内存中的对象不存在了。
end;
 
精灵太保:如果是Obj2指向Obj1的话,根据指针的定义,指针保存的是内存地址.
那么Obj1:=nil的时候,那Obj2中保存的Obj1的地址不也失效了吗?Obj2.Free也不可能
发生呀,因为Obj2指向为空,它又如何得到原来对象的地址呢?
 
指针就是一个指向地址的地址变量,它不能存储任何东西除了地址;
Obj2和Obj1虽然它们存的都是同一个地址, 但它们本身是两个不同
地址的地址变量(即它们本身的地址是不同的), 所以 Obj1 := nil 并不影响 Obj2 中所存内容
 
其实他们说了那么多,归根结底你要理解什么是指针? 其实指针就是一个放置地址编号的
空间。比如说P为一指针,现将对象A赋给变量B,其实就是将对象A在内存中的地址编号赋
给了B,B中只存了A在内存中的编号。实际对象并没移动!我们可以把指向那地址空间的编
号叫指针。这种说法应可以说很形象了。就像生活中的一个箭头指向某物样的。
 
多人接受答案了。
 
后退
顶部