太简单了,可我就是不会,请高手给予指点 ( 积分: 20 )

  • 主题发起人 主题发起人 nishuodedui
  • 开始时间 开始时间
N

nishuodedui

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了一个公共变量
var
ini_file:Tinifile;
....
ini_file:=Tinifile.create(filename);
我用 ini_file.free释放文件
我想问一下:
我释放的是公共变量 ini_file,还是公共变量 ini_file 所对应的文件
 
我定义了一个公共变量
var
ini_file:Tinifile;
....
ini_file:=Tinifile.create(filename);
我用 ini_file.free释放文件
我想问一下:
我释放的是公共变量 ini_file,还是公共变量 ini_file 所对应的文件
 
当然是变量

不过释放了变量,其所关联的文件也就自由了
 
to:wp231957
那为什么释放完之后
我利用公共变量在关联一个文件却没有异常。
例如:
ini_file:=Tinifile.create(filename);
然后读取文件内容,显示文件内容,均可以
 
ini_file 只不过是一个变量名而已
定义类型时,因为没有创建对象,所以程序并没有分配存储空间
当创建该对象(create)时,分配存储空间,如果释放对象的存储空间就free

这是我的理解
 
我的理解:
var
ini_file:Tinifile
//声明一个Tinifile类型变量
....
ini_file:=Tinifile.create(filename)
//给变量赋值
这些代码的含义是:
对文件的操作其实是对一个内存地址块的操作,所以ini_file声明为一个变量,是一个指向
一个特定内存块的指针,通过create在内存创建一块文件空间,然后通过
ini_file:=Tinifile.create(filename);就可以将内存地址赋值给ini_file变量,以后就可
以通过ini_file操作文件了,当free时,只是释放内存空间,变量ini_file还存在,作为
存储地址的功能尚可利用,实际可看成ini_file=nil(值为空),可再次进行操作:
ini_file:=Tinifile.create(filename);
 
Jonson_sunshine:
你的理解基本正确。
补充如下:ini_file本身是一个32位的变量,你可以将其看做一个指针或者是一个整型变量。
当使用ini_file.free的时候,释放的是指针指向内存,但是指针本身还在,并且,其内容依然是刚刚被释放的那块内存的地址。换句话说,调用ini_file.free后,ini_file本身并不是nil,因此,在其它地方单纯通过ini_file变量根本不知道实际上那块内存已经不存在了。因此,建议使用FreeAndNil(ini_file)函数来释放对象的实例
 
to:放飞
我还想请教一下定义一个整形公共变量是不是在程序编译时就分配内存,而文件型公共变量在程序编译时只不过是定义了一个指针变量,并没分配空间,这两点有什么区别。请指点一下
 
无论你定义什么类型的全局变量,在程序被加载的时候都会预先按变量本身的大小为其分配相应大小的内存。需要注意的是:系统仅仅为其分配变量本身所占内存的大小,也就是说,为其分配SizeOf大小的地方。
文件型变量在Delphi中是一个记录类型
 
分配变量本身所占内存的大小,比如整形变量:A
则分配SIZEOF(A)大小的空间,是这样吗?
 
我认为是这样的
 
谢谢大家的指点,揭贴
 
后退
顶部