Delphi的对象注销方法Destroy和free的区别
Delphi的注销方法有两个:Destroy和Free。Delphi建议使用Free,因为它比Destroy更为安全,同时调用Free会生成效率更高的代码。
您可以用下列的语句释放用完的Employee对象:
Employee.Free;
和Create方法一样,Free方法也是TEmployee从TObject中继承过来的。把您的注销放在try…finally程序模块的finally部分,而把对象的程序代码放在try部分是编程的好习惯。这样,即使您的程序代码在使用对象时发生了异常事件,也会确保您为这个对象分配的内存会被释放。
二者的区别是,Destroy 会直接释放对象,而Free会事实检查该对象是否存在,如果对象存在,或者对象不为nil,它才会调用Destroy。因此,程序中应
该尽量使用free来释放对象,这样更加安全一些。(但要注意,free 也不会自动将对象置为nil,所以在调用free之后,最好是再手动将对象置为nil。)
TObject类有一个虚拟的Destroy虚构函数和一个非虚拟的Free函数。Free函数中是调用Destroy的。因此,当我们对任何对象(都是TObject的子类对象)调用 .Free();之后,都会执行 TObject.Free();,它会调用我们所使用的对象的析构函数 Destroy();。这就保证了任何类型的对象都可以正确地被析构
转载于:https://www.cnblogs.com/rogee/archive/2010/09/20/1832003.html
Delphi的对象注销方法Destroy和free的区别相关推荐
- Delphi的对象机制浅探[转载]
Delphi的对象机制浅探 savetime2k@yahoo.com 2004-1-3 前几天开始阅读 VCL 源代码,可是几个基类的继承代码把我看得头大.在大富翁请教了几位仁兄后,我还是对Delph ...
- Delphi之对象库(Object Repository)
对象库(Object Repository)是一种手段,通过这种手段,用户可以选择预定义的对象,并运用到自己的应用程序中,用对象库能做以下的工作: 选择一个预定义的应用程序.窗体或对话框,用于用户的应 ...
- Delphi 中将对象作为参数传递的使用
Delphi 中将对象作为参数传递的使用 举例分析 2009-07-24 13:40 下面的单击事件,将要调用一个以对象为参数的方法,并将结果显示出来. procedure TForm1.btn1Cl ...
- OpenCV【零】—————cv::Mat——Mat对象创建方法
OpenCV (一)--Mat对象创建方法 目录 OpenCV (一)--Mat对象创建方法 1. cv::Mat优点及原理(本质类) 2. Mat类拷贝及对象的创建方法 3. Mat 对象元素的高效 ...
- Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP
Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...
- C#对象数组排序方法
一个排序的类,用了几种方式实现的. using System; namespace DataStruct { public class Sorter { /// <summar ...
- selenium提取数据之driver对象定位标签元素获取标签对象的方法
selenium提取数据之driver对象定位标签元素获取标签对象的方法 在selenium中可以通过多种方式来定位标签,返回标签元素对象 find_element_by_id (返回一个元素) fi ...
- python类、对象、方法、属性之类与对象笔记
为什么80%的码农都做不了架构师?>>> python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... ...
- java字符串转json取集合_Java中Json字符串直接转换为对象的方法(包括多层List集合)...
使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...
最新文章
- eclipse svn 与资源库同步 符号说明
- 【记录】一些平时留意过的
- httpclient 多附件上传
- Hard Disk Drive HDU - 4788
- 代码分析工具python_Python代码分析工具:PyChecker、Pylint
- youcans 的 OpenCV 学习课—1.安装与环境配置
- poj 3131 Cubic Eight-Puzzle 双向广搜 Hash判重
- prototype.js 源码解读v1.3.1版本
- 动态规划——打家劫舍(Leetcode 198)
- Helm 架构 - 每天5分钟玩转 Docker 容器技术(161)
- Axure工具概述以及Axure RP9的安装汉化和授权
- CSS中使用border属性来绘制三角形
- 马斯克喊话库克:昨天你对我爱答不理,今天我让你高攀不起
- python之matplotlib画二元函数图像
- C++编译与链接(2)-浅谈内部链接与外部链接
- 新人带团队五步骤(其中相互竞争是生有体会的好,团队文化也是)
- 六、阻塞队列与源码分析(上)
- Oracle Primavera Unifier文档管理器(Document Manager)
- Aptos VS Sui,盘点两大 Move 系新公链的创新异同
- cath数据库fasta备注_sam's note
热门文章
- hystrix原理_go-hystrix熔断机制
- default activity not found怎么解决_我怎么也没想到“羽绒服”的英文是down jacket,哪里down了?...
- linux7开放3306端口,CentOS 7 开放3306端口访问
- python 执行ping命令_Python黑科技:在家远程遥控公司电脑,python+微信一键连接!...
- python stringstrip方法详解_Python 的技巧和方法你了解多少?
- 单片机at指令解析 开源_分享Github上几个开源单片机硬件驱动库
- linux subversion rpm,[linux笔记]在CentOS7.3中安装配置Apache2.4+Subversion1.9.*版本库
- oracle exp导出分区表,【实验】【PARTITION】exp导出分区表数据
- 基于STM32F103双轴机械臂完整电路板设计
- 绘制电路图风格的纠结