Ada - 从异构列表中释放

Ada - Deallocation from a Heterogenous List

我正在通过继承创建一个异构循环链表。作为一个动态分配的数据类型,我需要某种形式的释放,所以我最初想到了Ada.Unchecked_Deallocation。不幸的是,由于根元素被标记并且我希望能够使用相同的指针类型来访问层次结构中的任何对象,因此我的访问类型的工作方式无法编译以下代码片段。

type Element is tagged private;
type ElementPtr is access all Element'Class;

-- fully define Element

procedure Free is new Ada.Unchecked_Deallocation(Element, ElementPtr);

有没有人对我可以用来释放由 ElementPtr 指向的任何继承元素类型的对象使用的内存的替代形式的释放有任何建议?谢谢!

ElementElement'Class是不同的类型, 并且您尝试使用不匹配的类型实例化 Unchecked_Deallocation。 尝试使用 Element'Class 实例化:

procedure Free is new Ada.Unchecked_Deallocation(Element'Class, ElementPtr);