ada - 如何引发对 Finalize 的多次调用?

标签 ada finalize

在最近的 AdaCore Gem有一个声明

The implementation of Finalize is slightly more complicated: the Ada reference manual indicates that a Finalize procedure should always be idempotent. An Ada compiler is free to call Finalize multiple times on the same object, in particular when exceptions occur.

我需要测试一个私有(private)控制的类型,
   type T is private;
private
   type T is new Ada.Finalization.Controlled with ...
我可以更改源以使类型明显受控
   type T is new Ada.Finalization.Controlled with private;
然后调用Finalize (My_T); (甚至My_T.Finalize?);但是有什么方法可以在不更改被测软件的情况下导致多个最终确定?

最佳答案

为了测试的目的,我使用了一个子包。它允许测试私有(private)部分。
假设您的包裹是:

package A is
   type T is private;
private
   type T is new Ada.Finalization.Controlled with ...
end A;

我会用类似的东西进行测试:
package body A.Test is
   procedure Test_Finalize is
       My_T : T;
   begin
       My_T.Finalize;
   end Test_Finalize;
end A.Test;

关于ada - 如何引发对 Finalize 的多次调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4740899/

相关文章:

multidimensional-array - Ada - 如何获取二维数组的 'First' 和 'Last' 属性?

pointers - 如何将对约束字符串的访问传递给 Ada 中的子程序

Ada:违反 "No_Exception_Propagation"- 第 2 部分

ada - 为 Ada Array of Records 循环生成什么代码?

.net - 为什么最好不要使用 finalize 进行清理? 。网

java - 在销毁 'finalize()' 对象之前,垃圾收集器是否总是调用 'Unreachable' 方法?

java - Finalize() 何时执行?

arrays - 我如何在 Ada 中定义一个字符串数组?

java - 无法在不同对象上调用 Finalize() 方法

java - java中如何销毁一个对象?