通用访问类型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关键字,它会给出一个错误,结果必须是一般访问类型,我必须添加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”分配的对象
  • 带有“all”:此外,任何标记为“别名”的对象。

以上是通用访问类型Ada的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>