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

Pointers 访问类型的分配变量何时以Ada语言发布?,pointers,ada,Pointers,Ada,我正在阅读Ada访问类型,据我所知,您与操作员new分配的访问类型的对象在没有人再指向它们时被释放: P>艾达的访问类型是否完全符合C++中的代码> STD::SyrdYPPTR ?(除了艾达的指针相关的C++没有的约束) 编辑 当我说std::shared\ptr时,我的意思是当没有更多的变量指向对象时,对象被释放。编译器被允许实现垃圾收集,但我不知道有任何编译器真正做到了这一点(除了GNAT的一些自定义版本) 你必须等待C++程序员通过,以与C++的代码> STD::SyrdYPPTR 进

我正在阅读Ada
访问类型
,据我所知,您与操作员
new
分配的
访问类型
的对象在没有人再指向它们时被释放:

<> P>艾达的访问类型是否完全符合C++中的代码> STD::SyrdYPPTR <代码>?(除了艾达的指针相关的C++没有的约束)

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

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

<>你必须等待C++程序员通过,以与C++的代码> STD::SyrdYPPTR <代码>进行比较。
如果要确保在存储池(堆上)中分配的对象被解除分配,可以使用
Ada。未经检查的\u解除分配
允许编译器实现垃圾收集,但我不知道有任何编译器实际执行垃圾收集(除了GNAT的一些自定义版本)

<>你必须等待C++程序员通过,以与C++的代码> STD::SyrdYPPTR <代码>进行比较。 如果要确保在存储池(堆上)中分配的对象被解除分配,可以使用
Ada。未选中的\u解除分配

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

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

对于a-la std::shared\ptr指针,您需要滚动您自己的实现或搜索一些Ada库(可能GNATCOLL.Refcount是匹配的)。

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

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


对于指针a-la std::shared\u ptr,您需要滚动您自己的实现,或者搜索一些Ada库(可能是GNATCOLL.Refcount匹配).

只有当类型超出范围(如果该类型已为其指定存储大小)时,才能保证回收访问类型的存储。只有当类型超出范围(如果该类型已为其指定存储大小)时,才能保证回收访问类型的存储。