http://blog.sina.com.cn/s/blog_4ca032c301000a7m.html
delphi程序片断如下:
aobj1
:=
TMyClass1.Create(1,2);
aobj2
:=
TMyClass1.Create(3,4);
aobj1
:=
aobj2;
P1
:=
@aobj1;
P2
:=
@aobj2;
if
P1
=
P2
then
ShowMessage('Equal');
aobj1.Free;
aobj2.Free;
上面的代码为什么ShowMessage('Equal');从来不执行,同时,最后2句只能有一句,而如果两句都有,就出错?或者,对象变量赋值的本质是什么?
-------------------------------------------------------------------------
-------------------------------------------------------------------------
大哥给你仔细讲讲:
delphi对象变量其实是个指针(4个字节),Create后在堆中创建对象,返回其地址给对象变量
aobj1
:=
TMyClass1.Create(1,2);
aobj2
:=
TMyClass1.Create(3,4);
aobj1
:=
aobj2;
//aobj1
也指向了aobj2的对象,在此丢失了对TMyClass1.Create(1,2)的引用,你将不能释放它,有内存问题
P1
:=
@aobj1;
//p1,p2得到的是aobj1,aobj2的地址,而不是对象的地址
P2
:=
@aobj2;
if
P1
=
P2
then
//因为aobj1,aobj2的地址不相同,所以永远不成立
ShowMessage('Equal');
aobj1.Free;
//aobj1
也指向了aobj2的对象,所以你对同一对象释放了两次
aobj2.Free;
DELPHI一般不区分实际的对象与指向对象的指针(即我们所说的对象变量),所以很多人不能理解DELPHI里的对象