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/