类是套数据定义,那么声明一个类类型变量后,并在delphi用create创建了这个实
例后,是否在内存中就开辟了一段内存空间来存放这个类实例(类对象)?也就是说类只是定议,而类对象是一堆按照那个类的定义所生成在内存中的数据??
那这个类对象是它所在类类型的一个指针么?记的在哪本书里看到过,类对象是一那个类的指针??记不清了,请帮忙解是一下吧。是怎么一回事?

解决方案 »

  1.   

    Delphi中所有类实例----即对象都是四个字节的指针,但我们使用VAR申明一个类对象后,实际上只是在栈中创建了一个四字节的指针变量,这个时候这个指针的内容还是没有意义的;当我们使用类方法Create创建了对象后,这个时候才会在堆中创建一个真实的对象,并且也在这个时候先前创建的对象指针的内容才会指向这个被创建的对象实体!至于你说的那个开辟空间的问题,这里存在两个空间,一个是栈中的空间,大小为四个字节,是在申明(使用VAR)对象变量的时候就创建的;另外一个是堆上的空间,是在使用类的构造方法的时候创建的,大小根据类的不同而不同!所以在对对象进行释放以后,应该将对应的对象指针清空,以免出现野指针的错误调用!
      

  2.   

    那么,在delphi里怎么将“在对对象进行释放以后,应该将对应的对象指针清空”??另外请问 FrameSniper(§绕瀑游龙§) ( ) 这些东东你是从哪些书上看到的?回答完马上就结贴。谢谢!!!!!
      

  3.   

    对啊,我们在释放对象后,只是将堆中对象实体进行了释放,但与此同时指向这个实体的栈中的对应指针可能还指向这个位置,如果你不将这个栈中的指针变量的内容清空,将来有可能再次调用这个指针来访问被释放的堆中的对象实体,这样就会造成异常。也就是常说的野指针调用。因此,需要在释放对象后,将对象对应的(对象)指针变量的内容清空!其实Delphi的这些内容都是Delphi对象模型的必备知识,在《Delphi技术手册》上有一些介绍,但不是特别全面.........