通用访问类型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”:此外,任何标记为“别名”的对象。