Ada中记录的动态数组分配

时间:2010-11-26 05:26:14

标签: free ada dynamic-arrays new-operator

我正在尝试在Ada中动态分配一个大型数组(好吧,一个数组的数组)。 例如,我能够像这样动态分配一个对象:

type Object;
type ObjPtr is access Object;
OP : ObjPtr;
-- sometime later
OP := new Object;
OP.Index := I;--OP.Ptr.all;
Free(OP);

我正试图模仿这个基准代码:

Object **objList = new Object*[500000];
int32_t *iList = new int32_t[500000];
for (int32_t i = 0; i < 500000; ++i)
{
  objList[i] = new Object;
  iList[i] = Object::getIndex(objList[i]);
  delete objList[i];
}
delete[] iList;
delete[] objList;

可悲的是,我甚至无法做类似这个c ++的事情:

Object *objList = new Object*[500000];
到目前为止,我想出了这么多:

type objs is array (Positive range <>) of Object;
type objList is access objs;

但我可能会离开。

1 个答案:

答案 0 :(得分:1)

在Ada中,您的C ++代码大致会转换为以下内容:

Alloc_Count : constant := 500_000;
type ObjPtr is access Object;
type ObjArray is array (1 .. Alloc_Count) of ObjPtr;
OA : ObjArray;
begin
   for I in OA'Range loop
   OA(I) := new Object;
   -- ... do the other things
end loop;

如果您想对对象使用调度操作(即Object被定义为标记类型),请使用Object'class代替Object ObjPtr声明。