何时分配以Ada语言发布的访问类型的变量?

时间:2018-06-12 09:44:54

标签: pointers ada

我正在阅读有关Ada access types的内容,据我了解,当您无法使用access types时,您分配的new对象将被释放再次指向他们:

那么,Ada中的访问类型与C ++中的std::shared_ptr行为完全相同吗? (除了Ada与C ++没有的指针相关约束)

修改

当我说std::shared_ptr时,我的意思是当没有更多变量指向它们时,该对象被释放。

2 个答案:

答案 0 :(得分:4)

编译器允许实现垃圾收集,但我不知道任何编译器实际上是这样做的(除了GNAT的一些自定义版本)。

您必须等待C ++程序员通过,才能与C ++中的std::shared_ptr进行比较。

如果要确保取消分配存储池(堆上)中分配的对象,请使用Ada.Unchecked_Deallocation

答案 1 :(得分:0)

不,Ada指针(实际上)作为C / C ++普通指针几乎不受管理。正如雅各布的回答所说,这是我在实践中看不到的编译器实现选择。

我所知道的区别是,对于本地范围的指针类型,当类型而不是指针对象时,您将从该类型的所有对象获取内存,超出范围。但是这些指针很少有用(它们可以用于非常本地化的算法,但不适用于长寿命结构)。

对于指针a-la std :: shared_ptr,您需要为自己的某个Ada库推送自己的实现或钓鱼(可能是GNATCOLL.Refcount匹配)。