Ваш код C выделяет массив указателей на Structure
. Я понятия не имею, почему это делается таким образом, вместо того, чтобы просто выделять массив Structure
, вы должны спросить об этом у автора задачи.
Прямой эквивалент с использованием new
будет выглядеть так:
Structure** allocating(int N)
{
struct Structure** tab = new Structure*[N];
for (int i = 0; i < N; i++)
{
tab[i] = new Structure;
}
return tab;
}
Распределение может быть немного сложнее:
void deallocating(Structure** tab, int N)
{
for (int i = 0; i < N; i++)
{
delete tab[i]; //delete objects
}
delete[] tab; //delete array itself, notice the [] after delete!
}
Если вы можете перейти к массиву объектов вместо массива указателей, код становится намного проще:
Structure* allocating(int N)
{
return new Structure[N];
}
Позже вы также освободите его с помощью delete[]
Как отмечалось в комментариях, в C ++ мы предпочитаем не использовать управление памятью напрямую (особенно в современном ключевом слове C ++ *). 1023 * считается неприятным запахом ). std::vector
может отлично справиться со всеми вашими требованиями к массиву, он никогда не утечет память и может легко изменить свой размер.