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 是匹配项)。
我正在阅读有关 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 是匹配项)。