新的Ada子池固定装置和泳池池之间有什么区别?

时间:2013-02-12 19:58:12

标签: pointers memory-management ada

我最近在迭代器和池上阅读了the 2012 rationale部分。其中一个概述的是关于子池的新功能,一个没有答案的问题是子池和池池之间的区别是什么 - 我的意思似乎与[pg.25]相同可能是这样实现的:

   
-- Minnesota: Land of 10,000 Lakes
type Minnesota(Size: Storage_Count) is new Root_Storage_Pool with private;
type Lake(Size: Storage_Count) is new Root_Storage_Pool with private
     with Storage_Pool => Minnasota;
-- ...
type Pooled is [...] with Storage_Pool => Lake;

虽然我承认我可能会非常错误,因为我没有使用子池,更少的池(还)。

1 个答案:

答案 0 :(得分:0)

来自Comp.Lang.Ada的Randy Brukardt。

  

Aspect Storage_Pool仅适用于访问类型(13.11(15)和   其他)和类型湖不是一种访问类型,所以这是非法的(和   也毫无意义。)

     

您可以通过在其中放置其他池来实现一个池   实施(明尼苏达州这里包括一系列10000个湖泊   :-)。但是你必须有办法选择属于哪个项目   每个,咳,子池。你要重新发明轮子。

     

还有最终确定的问题。子池机制确保   对象不会超过他们的子池(指向对象的指针)   可能比子池更长,但不是对象本身,即使是   子池明早被明确销毁(就像   Unchecked_Deallocation确实)。没有这样做没有好办法   语言支持(我们每个手写的子池实现   谈到坚持认为没有受控制,受保护或任务对象   从它分配,这显然是有限的。)

     

让我向你保证,正确的做法是艰难而有争议的。它是   几乎下降了几次。自己动手不会   有争议的(我希望!),但它仍然很难。自ARG以来   已经完成了肮脏的工作,最好使用它。

                                            Randy.