如何激活Finalize的多个调用?

Sim*_*ght 5 ada finalize

在最近的AdaCore Gem中有一个声明

Finalize的实现稍微复杂一些:Ada参考手册表明Finalize过程应该始终是幂等的.Ada编译器可以在同一对象上多次调用Finalize,特别是在发生异常时.

我需要测试一个私人控制类型,

   type T is private;
private
   type T is new Ada.Finalization.Controlled with ...
Run Code Online (Sandbox Code Playgroud)

我可以更改源以使类型明显受控制

   type T is new Ada.Finalization.Controlled with private;
Run Code Online (Sandbox Code Playgroud)

然后只是打电话Finalize (My_T);(甚至My_T.Finalize?); 但有没有什么方法可以导致多次最终确定而不对测试中的软件进行此更改?

cic*_*ron 3

出于测试目的,我使用了子包。它允许测试私人部分。假设您的包裹是:

package A is
   type T is private;
private
   type T is new Ada.Finalization.Controlled with ...
end A;
Run Code Online (Sandbox Code Playgroud)

我会用类似的东西进行测试:

package body A.Test is
   procedure Test_Finalize is
       My_T : T;
   begin
       My_T.Finalize;
   end Test_Finalize;
end A.Test;
Run Code Online (Sandbox Code Playgroud)