Delphi⾃定义类中的“构造函数”与“析构函数”
1.重载构造函数overload关键字
eg:
constructor Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer);overload;
constructor Create(Name:string;Sex:string);overload;
ps: 重载构造函数,注意⼀定要使⽤关键字:overload
2.⾃定义类中是否需要显式定义构造函数:
所有类默认继承⾃TObject,即使没有声明class(TObject),Create实际是通知编译器为其分配⼀块堆内存.
在⾃定义类中,即使没有显式的定义构造函数,程序默认调⽤的是TObject的构造函数.
3.TObject.Free的真正作⽤:实际上只是为"堆内存块"解锁,使得其他程序可以使⽤该块堆内存,⽽引⽤并没有被
重置为nil,因此,经常Free之后,仍可以正确访问到对象的成员变量(解锁后,该块内存没有被其他程序使⽤)
4.⾃定义的类,什么时候需要专门定义析构函数?
⾃定义的类中,含有类成员.由于Free操作只是对当前对象的"堆内存块"进⾏了解锁,⽽类成员指向的另⼀块
"堆内存块" 并没有被解锁,如果不在析构函数中对其解锁,则会造成内存泄漏.
5.不需要程序员显⽰调⽤Free的⾃定义类?析构函数的定义
对于从Tcomponent继承下来的对象,在Create的时候可以指定⼀个所有者。如果⼀个对象在创建时指
定了所有者,那么该对象的⽣存期将由所有者进⾏管理。所有者在析构时,会同时析构它所拥有的全部对象。
6.⾃定义类中,如何定义析构函数?
Delphi中所有类都继承⾃TObject ,Create默认不是虚⽅法 ,Destroy默认是虚⽅法.被覆盖的函数必须是
虚(virtual)的,或者是动态(dynamic)的,因此⾃定义类的Destroy⽅法可以被覆盖.
⽽VCL中组件继承的⼤多Create都被声明成虚⽅法了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论