Ну, для начала, new
/ delete
не устаревают.
В вашем конкретном случае c они, однако, не единственное решение. То, что вы выберете, зависит от того, что скрыто под вашим комментарием «сделать что-то с массивом».
Во втором примере используется нестандартное расширение VLA, которое пытается разместить массив в стеке. Это имеет определенные ограничения, а именно: ограниченный размер и невозможность использования этой памяти после того, как массив выходит из области видимости. Вы не можете переместить его, он «исчезнет» после того, как стек развернется.
Так что, если ваша единственная цель - выполнить локальные вычисления, а затем выбросить данные, это может на самом деле работать нормально. Однако более надежным подходом было бы динамическое выделение памяти, предпочтительно с std::vector
. Таким образом, вы получаете возможность создавать пространство для ровно столько элементов, сколько вам нужно, основываясь на значении времени выполнения (к чему мы стремимся все время), но оно также хорошо очищается и вы можете его убрать этой области, если вы хотите сохранить память для дальнейшего использования.
Возвращаясь к началу, vector
будет вероятно использовать new
на несколько уровней глубже, но вы не должны не беспокойтесь об этом, поскольку интерфейс, который он представляет, намного лучше. В этом смысле использование new
и delete
может считаться не рекомендуется.