Delphi中的相互引用记录(Win32)

前端之家收集整理的这篇文章主要介绍了Delphi中的相互引用记录(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个字节).这不是很多.

猜你在找的Delphi相关文章