Delphi中的相互引用记录(Win32)
发布时间:2020-12-15 04:28:46 所属栏目:大数据 来源:网络整理
导读:是否有任何解决方法在Delphi中创建相互引用的记录?这是代码的简化版本: MyRec1 = record arr: MyRec2Array;end;MyRec2 = record mr: MyRec1;end;MyRec2Array = array of MyRec2; 显然是向前宣布记录类型 MyRec2 = record; 在Delphi for Win32中不起作用.
是否有任何解决方法在Delphi中创建相互引用的记录?这是代码的简化版本:
MyRec1 = record arr: MyRec2Array; end; MyRec2 = record mr: MyRec1; end; MyRec2Array = array of MyRec2; 显然是向前宣布记录类型 MyRec2 = record; 在Delphi for Win32中不起作用. 切换到类而不是记录是不好的,因为这将增加内存消耗和代码复杂性,所以我宁愿留下记录. 有什么建议么? 解决方法
记录是值类型,而不是引用类型.这意味着用作较大数据结构成员的所有记录都将内置在结构本身中,而不是作为指针.尝试创建包含彼此的两个记录会将编译器抛出一个无限循环,同时它试图找出记录的结构.这可能是您无法转发 – 声明记录的原因,即使您尝试在此处插入引用类型(动态数组),但仍然无法违反语言规则.
但是您可以做的是将一个指针到记录类型声明为forward声明,如下所示: PMyRec2 = ^MyRec2 ... MyRec2 = record ... end; 当然,一旦你开始使用记录指针,你必须担心分配和释放内存,并且你尝试避免使用类的代码复杂性出现在你的项目中.底线:用类做这个.做一个记录,如果不是他们两个,一个类.这是最简单的方法,真的. 额外的内存开销是可以忽略不计的.它指向每个引用的对象的指针,您需要用于指向对象的指针,以及D2009之前的每个实例或D2009或更高版本上的两个(8个字节)之间的一个隐藏字段(4个字节).这不是很多. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |