【问题标题】:When are allocated variables of an access type released in Ada language?何时以 Ada 语言发布访问类型的分配变量?
【发布时间】:2018-06-12 09:44:53
【问题描述】:

我正在阅读有关 Ada access types 的信息,据我了解,当没有人再指向它们时,您使用运算符 new 分配的 access types 对象被释放:

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

编辑

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

【问题讨论】:

    标签: pointers ada


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 访问类型的存储只有在类型超出范围时才能保证被回收,前提是该类型已为其指定了 Storage_Size。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 2015-12-14
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多