daniel_pr
@daniel_pr

В чем преимущество статического массива перед динамическим?

Я совсем новичок в с++ и вот наткнулся на тему указателей и динамический памяти и немного не понимаю одной вещи: в чем преимущество статически объявленного массива перед динамически объявленым в данном примере?

#include <iostream>

int main() {
  int array_length = 0;
  std::cin >> array_length;
  int numbers[array_length];
  return 0;
}

VS

#include <iostream>

int main() {
  int array_length = 0;
  std::cin >> array_length;
  int* numbers = new int[array_length];
  delete[] numbers;
  return 0;
}
  • Вопрос задан
  • 545 просмотров
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
Насколько мне известно...
Статический массив:
- Размер должен быть известен на момент компиляции. Твой пример - это нестандартная фишка ряда компиляторов, по-хорошему для статического массива размер не должен быть динамическим (определяться во время выполнения).
+ Компилятор сам позаботится об удалении массива.

Динамический массив:
+ Размер может определяться во время выполнения.
- Нужно не забыть освободить память массива самостоятельно.

А вообще, если нет причин делать иначе, используй std::vector. Если тебе понадобится именно массив в стиле C, вектор позволяет его легко получить методом .data().
+ Размер не просто динамический, вектор может переаллоцировать свою память по мере надобности. Так что для ситуаций, когда размер заведомо неизвестен, вектор весьма удобен.
+ Вектор сам управляет своей памятью. Убил вектор - убил управляемый им массив.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В первом случае у вас не статический массив, а локальный. Память для него выделяется на стеке и ограничена размером стека.
Во втором случае выделяется динамический массив. Память под него ограничена свободной памятью системы или предельным размером динамического массива, если такое ограничение есть в системе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы