通用访问类型 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”的对象。
我仍然对 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”的对象。