Types 如何确定受Ada保护的类型

Types 如何确定受Ada保护的类型,types,ada,protected,Types,Ada,Protected,给定受Ada保护的类型: protected type A is procedure Foo; ... private M : Map; ... end A; 您将如何实现或模拟在以下情况下调用的Finalize过程 保护对象是否已最终确定 基本上,我需要使用受保护类型的私有成员进行一些内部管理(迭代某些映射等)。将参与终结的私有成员包装在一个或多个来自Ada.finalization.Controlled或Limited\u Controlled的记录中。当受

给定受Ada保护的类型:

protected type A is
    procedure Foo;
    ...
private
    M : Map;
    ...
end A;
您将如何实现或模拟在以下情况下调用的Finalize过程 保护对象是否已最终确定


基本上,我需要使用受保护类型的私有成员进行一些内部管理(迭代某些映射等)。

将参与终结的私有成员包装在一个或多个来自Ada.finalization.Controlled或Limited\u Controlled的记录中。当受保护对象最终确定时,这些私有成员也将相应地最终确定

下面是一个快速有效的(!)示例:

运行此命令,我得到:

C:\sandbox\protected_final
Initialize the Map part as instance 1
Initialize the Map part as instance 2
Clean up the Map stuff for instance 2
Clean up the Map stuff for instance 1
[2011-03-04 08:37:29] process terminated successfully (elapsed time: 00.21s)

“外部”初始化/清除消息来自静态声明的Test_项实例,而内部消息来自动态分配和解除分配的Test_项句柄。

当我在linux上通过valgrind运行此消息时,我得到一个“仍然可访问”类型的内存泄漏!“仍然可以访问:1个块中有2104个字节”-有没有想到泄漏可能来自哪里?
C:\sandbox\protected_final
Initialize the Map part as instance 1
Initialize the Map part as instance 2
Clean up the Map stuff for instance 2
Clean up the Map stuff for instance 1
[2011-03-04 08:37:29] process terminated successfully (elapsed time: 00.21s)