假设具有以下设置:
type My is new Integer;
type My_Acc is access My;
procedure Replace(Self : in out My_Acc; New_Int : Integer)
with Pre => New_Int /= Self.all, Post => Self'Old.all /= Self.all;
注意:上面的代码可能并不完全有效,但我希望这个概念是可以理解的。
现在如果Unchecked_Deallocation()
在Self
内部使用Replace
并且分配了一个新的 Integer 并将其设置为Self
(这应该导致 Self'Old 指向一个现在无效的内存位置)会发生什么?
Ada 是否保留了Self'Old
指向前一个内存位置但在Unchecked_Deallocation()
执行之前的快照?
如果Self'Old
在 Post 合同中使用无效,你怎么还能访问以前的值?是否可以在 Pre 合约中创建手动快照,然后可以在 Post 中使用?也许可以使用 Ghost_Code 来实现?
我想在 Spark 中制作所有东西,以防万一发生变化。
编辑:固定Self
为in out
西蒙赖特提到的。
编辑:Self
允许的固定类型null