Delphi中的Free和Nil和freeandnil函数
Delphi中的Free和Nil
在Delphi中释放对象资源时一般用Obj.Free(Obj为一个实例名),不过程Delphi中还有一个FreeAndNil(对象名)函数,那么用哪个好呢?Free和Nil的本质又都是什么呢?
在Delphi中一个对象名只是一个指向该对象的指针,可以有多个指针指向同一个对象地址。Nil是将指针置空,而Free则将指针指向的对象销毁掉。如下所示:
Obj.Free; //将Obj所指向的对象销毁。
Obj:= nil; //将Obj指针置空。如果将上面的一句放在后面,则Free时会报错,因为指针不指向该对象的地址,也不指向任何内存地址。
还有在销毁对象时一定要注意,看还有没有其他指针指向该对象,如果有却销毁掉了,那么其他指针调用该对象时会报错。如果有多个指针指向同一个对象时,不要用FreeAndNil来销毁对象,因为不确定是否还有指针指向该对象,此时只需把不用的指针置空就行了,不过在所有指针都不指向该对象时,一定要记得销毁掉,以释放资源。
---------------------
作者:云中雁012345
来源:CSDN
原文:https://blog.csdn.net/peixiaobin_blog/article/details/18080559
版权声明:本文为博主原创文章,转载请附上博文链接!
Delphi中的Free和Nil和freeandnil函数的更多相关文章
- Delphi中关于资源释放(Free,Relealse,FreeAndNil)
根据日常编程经验,得出一些Delphi中关于资源释放的体会. 假如有对象Obj为TObject类型: 1) Obj.Free直接释放资源后,调用OnDestroy事件,但是没有将Obj指针值置为Nil ...
- 奇淫怪巧之在Delphi中调用不申明函数
前一阵子,研究了一段时间的Win32Asm,研究到后来发现Win32的ASM实际上还是和C版的介绍的一样.甚至还封装了一个简版的类似VCL库结构框架的32ASM结构库,不过搞着搞着就没兴趣了,也没继续 ...
- 在Delphi中获取和修改文件的时间
转载自 http://www.cnblogs.com/jieke/archive/2013/01/11/2855782.html 本文介绍了在Delphi中利用系统函数和Windows API函数调用 ...
- Delphi中destroy, free, freeAndNil, release用法和区别
Delphi中destroy, free, freeAndNil, release用法和区别 1)destroy:虚方法 释放内存,在Tobject中声明为virtual,通常是在其子类中overri ...
- 转delphi中nil的用法
转自:http://blog.csdn.net/haiou327/article/details/6666124 delphi中nil的用法 和C++中的NULL一样的意思,指空值,它和0值不一样-- ...
- 在Delphi中使用ShellExecute(handle, 'open', PChar(fname),nil, nil, SW_HIDE)函数应注意的问题
在Delphi中使用ShellExecute(handle, 'open', PChar(fname),nil, nil, SW_HIDE)函数应注意的问题: 一.对一般vcl程序及isapi dll ...
- Delphi中的关键字与保留字
Delphi中的关键字与保留字 分类整理 Delphi 中的“关键字”和“保留字”,方便查询 感谢原作者的收集整理! 关键字和保留字的区别在于,关键字不推荐作标示符(编译器已经内置相关函数或者留给保留 ...
- DELPHI中四种EXCEL访问技术实现
一.引言 EXCEL在处理中文报表时功能非常强大,EXCEL报表访问也是信息系统开发中的一个重要内容,本文总结以往开发中所用到的几中EXCEL文件访问方法,在实际工作中也得到了很好的验证,本文列举了其 ...
- Delphi中使用比较少的一些语法
本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ---Murphy 1,构造和析构函数: a,构造函数: 一般基于TComponent组件的派生类 ...
随机推荐
- Stopwatch简单时间检测
public ActionResult Index() { Stopwatch sw = new Stopwatch(); //实例化一个对象 sw.Start(); //开始计算 int[] a = ...
- mysql数据库表自增ID批量清零 AUTO_INCREMENT = 0
mysql数据库表自增ID批量清零 AUTO_INCREMENT = 0 #将数据库表自增ID批量清零 SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' AUT ...
- redis发布与订阅的实现
转自:https://blog.csdn.net/xiaoyu411502/article/details/51596477
- Java技术综述
自己打算好好学习下Java,所以想先明晰Java开发中到底有哪些技术,以便以后学习的过程中,可以循序渐进,随着学习的深入,本文将不断更新. Java基础教程将Java的入门基础知识贯穿在一个实例中,逐 ...
- Aspect表达式
任意公共方法的执行:execution(public * *(..))任何一个以“set”开始的方法的执行:execution(* set*(..))AccountService 接口的任意方法的执行 ...
- C++之++操作符重载
++ 运算符,还可分为前缀 ++ 和后缀 ++ 运算符. 重载前缀++运算符 C++ 允许重载前缀运算符,以使表达式 ++b 能递增 b 的长度值,并返回结果对象.该运算符可以作为成员函数来重载,这使 ...
- python和CSV
lines=[]; 表头数据 lines.append(list(retlist[0].keys())) 明细数据 for city in city_list: { lines.append(list ...
- IDEA 配置热更新
- 计算机网络(十三),Socket编程实现TCP和UDP
十三.Socket编程实现TCP和UDP 1.TCP (1)TCPServer.java类 package com.interview.javabasic.socket; import com.int ...
- 1110 Complete Binary Tree (25 分)
Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each in ...