2010-11-26 5 views
2

Я пытаюсь динамически выделять большой массив в Ada (ну, массив массива). Например, я могу динамически выделять объект следующим образом:Динамическое распределение массива записи в 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; 

К сожалению, я не могу даже сделать что-то как этот с ++ эквивалент:

Object *objList = new Object*[500000]; 

Я придумал это много до сих пор:

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

Но я, вероятно, далеко.

+0

Где массив массива? – Schedler 2010-11-26 11:12:15

ответ

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.