TPersistent destructor Destroy; override;
TComponent constructor Create(AOwner: TComponent); virtual;destructor Destroy; override;
TControl constructor Create(AOwner: TComponent); override;destructor Destroy; override;
…下面分析VCL中的构造和析构的源代码,以Tcontrol为例:constructor TControl.Create(AOwner: TComponent);begin inherited Create(AOwner);//创建基类子对象,并把析构权移交给AOwner。放在最前面 //这样就保证了“先创建基类子对象,再创建派生类子对象”的顺序 …//初始化,以及调用内部子对象的构造函数end;
destructor TControl.Destroy;begin …//析构派生类中内部子对象 inherited Destroy;//析构基类对象,放在最后面 //这样就保证了“先析构派生类子对象,再析构基类子对象”的顺序end;5 正确使用构造函数和析构函数 经过上面的分析,下面总结一下使用构造函数和析构函数的原则:在使用对象之前,必须先建立一个对象时,并且及时销毁对象,以释放资源。两个对象引用赋值时,要确保出现的无名对象(指没有被引用的对象)能被释放。当创建一个组件时,建议设置一个宿主组件(即使用AOwner参数,通常是窗体),由Aowner来管理对象的销毁,那么就不必惦记着销毁该组件了,这是Delphi在窗体上/数据模块设计并创建组件是采用的方法。所以我们不必书写调用该组件的析构函数。当函数的返回类型为对象时,那么Result也是对象的引用,确保Result引用的对象要存在。若要使用obj<>nil 或assigned(nil)测试对象存在时,在调用析构之后还应obj:=nil。请参考演示程序的源代码说明(建议要有)所有的Delphi程序已在win2k+Delphi6 sp2 上通过,对于C++程序,只是为了说明与Delphi中不同,并不保证能直接运行。为了加深对本篇文章的理解,建议参考演示程序。这篇文章包括了我在学习VCL/RTL中的一些经验和体会,加上本人的个人能力有限,难免出现错误,请大家不吝指正!在阅读本篇文章之前,需要读者对Oriented Pascal语言有一定的了解,并能理解多态,如果您对其中一些概念还不是很清楚的话,请参考相关文章。通过本篇文章,你应该能比较清楚地理解Delphi中的对象模型、构造&析构实现机制以及VCL中构造&析构 体系结构,并能掌握使用构造&析构的使用方法。Delphi中的构造&析构相当于C++中的算是简单多了,我们应该能掌握它。
上一页 [1] [2]
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18