当您使用完对象后,您应该及时撤销它,以便把这个对象占用的内存释放出来。您可以通过调用一个注销方法来撤销您的对象,它会释放分配给这个对象的内存。

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的区别相关推荐

  1. Delphi的对象机制浅探[转载]

    Delphi的对象机制浅探 savetime2k@yahoo.com 2004-1-3 前几天开始阅读 VCL 源代码,可是几个基类的继承代码把我看得头大.在大富翁请教了几位仁兄后,我还是对Delph ...

  2. Delphi之对象库(Object Repository)

    对象库(Object Repository)是一种手段,通过这种手段,用户可以选择预定义的对象,并运用到自己的应用程序中,用对象库能做以下的工作: 选择一个预定义的应用程序.窗体或对话框,用于用户的应 ...

  3. Delphi 中将对象作为参数传递的使用

    Delphi 中将对象作为参数传递的使用 举例分析 2009-07-24 13:40 下面的单击事件,将要调用一个以对象为参数的方法,并将结果显示出来. procedure TForm1.btn1Cl ...

  4. OpenCV【零】—————cv::Mat——Mat对象创建方法

    OpenCV (一)--Mat对象创建方法 目录 OpenCV (一)--Mat对象创建方法 1. cv::Mat优点及原理(本质类) 2. Mat类拷贝及对象的创建方法 3. Mat 对象元素的高效 ...

  5. Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP

    Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...

  6. C#对象数组排序方法

    一个排序的类,用了几种方式实现的. using System;    namespace DataStruct {    public class Sorter    { /// <summar ...

  7. selenium提取数据之driver对象定位标签元素获取标签对象的方法

    selenium提取数据之driver对象定位标签元素获取标签对象的方法 在selenium中可以通过多种方式来定位标签,返回标签元素对象 find_element_by_id (返回一个元素) fi ...

  8. python类、对象、方法、属性之类与对象笔记

    为什么80%的码农都做不了架构师?>>>    python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... ...

  9. java字符串转json取集合_Java中Json字符串直接转换为对象的方法(包括多层List集合)...

    使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...

最新文章

  1. eclipse svn 与资源库同步 符号说明
  2. 【记录】一些平时留意过的
  3. httpclient 多附件上传
  4. Hard Disk Drive HDU - 4788
  5. 代码分析工具python_Python代码分析工具:PyChecker、Pylint
  6. youcans 的 OpenCV 学习课—1.安装与环境配置
  7. poj 3131 Cubic Eight-Puzzle 双向广搜 Hash判重
  8. prototype.js 源码解读v1.3.1版本
  9. 动态规划——打家劫舍(Leetcode 198)
  10. Helm 架构 - 每天5分钟玩转 Docker 容器技术(161)
  11. Axure工具概述以及Axure RP9的安装汉化和授权
  12. CSS中使用border属性来绘制三角形
  13. 马斯克喊话库克:昨天你对我爱答不理,今天我让你高攀不起
  14. python之matplotlib画二元函数图像
  15. C++编译与链接(2)-浅谈内部链接与外部链接
  16. 新人带团队五步骤(其中相互竞争是生有体会的好,团队文化也是)
  17. 六、阻塞队列与源码分析(上)
  18. Oracle Primavera Unifier文档管理器(Document Manager)
  19. Aptos VS Sui,盘点两大 Move 系新公链的创新异同
  20. cath数据库fasta备注_sam's note

热门文章

  1. hystrix原理_go-hystrix熔断机制
  2. default activity not found怎么解决_我怎么也没想到“羽绒服”的英文是down jacket,哪里down了?...
  3. linux7开放3306端口,CentOS 7 开放3306端口访问
  4. python 执行ping命令_Python黑科技:在家远程遥控公司电脑,python+微信一键连接!...
  5. python stringstrip方法详解_Python 的技巧和方法你了解多少?
  6. 单片机at指令解析 开源_分享Github上几个开源单片机硬件驱动库
  7. linux subversion rpm,[linux笔记]在CentOS7.3中安装配置Apache2.4+Subversion1.9.*版本库
  8. oracle exp导出分区表,【实验】【PARTITION】exp导出分区表数据
  9. 基于STM32F103双轴机械臂完整电路板设计
  10. 绘制电路图风格的纠结