• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

剖析Delphi中的构造和析构

发布: 2008-5-19 10:51 | 作者: 不详 | 来源: 软件研发之窗 | 查看: 216次 | 进入软件测试论坛讨论

领测软件测试网


  end;

procedure CreateObj(Aclass:TTMyClass;var Ref);
begin
  Tobject(Ref):=Aclass.create; 
//ref为无类型,和任何类型都不兼容,所以使用时必须显式强制转换(cast)
//Aclass为类引用,统一的函数接口,不同的实现。
//它会根据Aclass引用/指向的实际类来构造对象。
 End;

CreateObj(TmyClass,Obj);
CreateObj(TmyClassSub,subObj);
3 析构函数与销毁对象
  3.1 什么是析构函数(“天生的”虚方法)
从OOP思想的语义上讲,析构函数负责销毁对象,释放资源。在Delphi中,同义。
Delphi为析构函数也定义了一种方法类型(mkConstructor,参见Delphi安装目录下的\Source\RTL\Common\typInfo.pas,125行),在VCL中,它实际是一种“天生的”虚方法,在VCL类所有的祖先-Tobject中定义了“destructor Destroy; virtual; ”。为什么VCL要这么做呢?因为它要保证在多态情况下对象能正确地被析构。如果不使用虚方法,则可能只析构了基类子对象,从而造成所谓的“内存泄露”。所以为了保证正确地析构对象,析构函数都需要加override声明。
3.2 对象销毁的全过程

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网