我正在阅读有关Ada access types
的内容,据我了解,当您无法使用access types
时,您分配的new
对象将被释放再次指向他们:
那么,Ada中的访问类型与C ++中的std::shared_ptr
行为完全相同吗? (除了Ada与C ++没有的指针相关约束)
当我说std::shared_ptr
时,我的意思是当没有更多变量指向它们时,该对象被释放。
答案 0 :(得分:4)
编译器允许实现垃圾收集,但我不知道任何编译器实际上是这样做的(除了GNAT的一些自定义版本)。
您必须等待C ++程序员通过,才能与C ++中的std::shared_ptr
进行比较。
如果要确保取消分配存储池(堆上)中分配的对象,请使用Ada.Unchecked_Deallocation
。
答案 1 :(得分:0)
不,Ada指针(实际上)作为C / C ++普通指针几乎不受管理。正如雅各布的回答所说,这是我在实践中看不到的编译器实现选择。
我所知道的区别是,对于本地范围的指针类型,当类型而不是指针对象时,您将从该类型的所有对象获取内存,超出范围。但是这些指针很少有用(它们可以用于非常本地化的算法,但不适用于长寿命结构)。
对于指针a-la std :: shared_ptr,您需要为自己的某个Ada库推送自己的实现或钓鱼(可能是GNATCOLL.Refcount匹配)。