通用访问类型 Ada

General Access type Ada

我仍然对 all 关键字在一般访问类型中的工作方式感到困惑

有什么区别:

type int_access is access all Integer;type int_access is access Integer;

例如:

type int_ptr is access all Integer;

Var : aliased Integer := 1;

Ptr : int_ptr := Var'Access;

代码工作正常,但如果我删除 all 关键字,它会给出一个错误,即 result must be general access type 并且我必须添加 all .

特定于池的访问类型——那些没有“all”的访问类型——只能用于在堆(或一些用户定义的存储池)中使用“new”关键字分配的对象。

这样就可以了:

type Int_Ptr is access Integer;
Prt: Int_Ptr := new Integer;

一般访问类型——带有“all”的那些——既可以用于堆分配的对象,也可以用于标记为“别名”的任何其他对象。所以这也行:

type Int_Ptr is access all Integer;
Prt: Int_Ptr := new Integer;

简而言之,规则是:

  • 没有“all”:只有分配了“new”的对象
  • with“all”:此外,任何标记为“aliased”的对象。

此处解释:Memory Management with Ada 2012