加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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个字节).这不是很多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读