我最近在迭代器和池上阅读了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;
虽然我承认我可能会非常错误,因为我没有使用子池,更少的池(还)。
答案 0 :(得分:0)
来自Comp.Lang.Ada的Randy Brukardt。
Aspect Storage_Pool仅适用于访问类型(13.11(15)和 其他)和类型湖不是一种访问类型,所以这是非法的(和 也毫无意义。)
您可以通过在其中放置其他池来实现一个池 实施(明尼苏达州这里包括一系列10000个湖泊 :-)。但是你必须有办法选择属于哪个项目 每个,咳,子池。你要重新发明轮子。
还有最终确定的问题。子池机制确保 对象不会超过他们的子池(指向对象的指针) 可能比子池更长,但不是对象本身,即使是 子池明早被明确销毁(就像 Unchecked_Deallocation确实)。没有这样做没有好办法 语言支持(我们每个手写的子池实现 谈到坚持认为没有受控制,受保护或任务对象 从它分配,这显然是有限的。)
让我向你保证,正确的做法是艰难而有争议的。它是 几乎下降了几次。自己动手不会 有争议的(我希望!),但它仍然很难。自ARG以来 已经完成了肮脏的工作,最好使用它。
Randy.