【问题标题】:General Access type Ada通用访问类型 Ada
【发布时间】:2021-05-15 13:53:32
【问题描述】:

我仍然对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

【问题讨论】:

    标签: pointers types ada


    【解决方案1】:

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

    这样就OK了:

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

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

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

    所以规则,简而言之,是:

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

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 2021-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多