Ada 语言什么时候释放访问类型的分配变量?

When are allocated variables of an access type released in Ada language?

我正在阅读有关 Ada access types 的文章,据我了解,您使用运算符 new 分配的 access types 的对象会在无人时释放不再指向它们:

那么,Ada 中的访问类型是否与 C++ 中的 std::shared_ptr 完全一样? (除了C++没有的Ada指针相关约束)

编辑

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

允许编译器实现垃圾回收,但我不知道有任何编译器真正做到了(除了一些定制的 GNAT 构建)。

您将不得不等待 C++ 程序员经过,才能与 C++ 的 std::shared_ptr 进行比较。

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

不,Ada 指针(实际上)与 C/C++ 普通指针一样几乎不受管理。正如 Jacob 的回答所说,这是我在实践中从未见过的编译器实现选择。

我知道的区别是,对于局部作用域的 指针类型 ,当 type,不是指针,超出了范围。但是这些指针很少有用(它们可以用于非常本地化的算法,但不能用于长期存在的结构)。

对于 a-la 的指针 std::shared_ptr,您需要推出自己的实现或从那里寻找一些 Ada 库(可能 GNATCOLL.Refcount 是匹配项)。