MyTetra Share
Делитесь знаниями!
В чем отличие в создании статического массива через new и просто через квадратные скобки [] в C++?
Время создания: 24.07.2025 14:09
Автор: Xintrea
Текстовые метки: язык, Си++, C++, массив, статический, new, указатель, создание, декларация, char, строка
Раздел: Компьютер - Программирование - Язык C++ (Си++)
Запись: xintrea/mytetra_syncro/master/base/1753355364urvyoaj8iv/text.html на raw.github.com

Создать указатель на статический массив в языке C++ можно, как минимум, двумя способами:



char a[10];



и



char *a = new char[10];



В чем между ними разница? В обоих случаях создается создается массив из 10 элементов char. Да, язык C++ таков, что в первом случае звездочки в типе создаваемого значения нет в синтаксисе команды, но из-за того что создается именно массив, тип у переменной a будет типом char[10], который в большинстве контекстов будет неявно преобразовываться к типу char*.


Самое главное отличие этих двух команд состоит в том, что в первом случае массив создается на стеке. При выходе переменной a из области видимости, эта переменная вместе со своим содержимым будет автоматически удалена.


Во втором случае массив будет выделен в куче. Причем, можно выделять массив произвольной длинны, даже если длинна неизвестна на этапе компиляции. То есть, вместо 10 можно написать какую-нибудь целочисленную переменную. Самый правильный тип для такой переменной - std::size_t.


За удалением данного массива надо следить вручную. Для удаления массива используется следующая команда:



delete[] a;



Здесь следует обратить внимание, что при удалении массива надо обязательно не забывать указывать квадратные скобки. Если их забыть, и написать "delete a", то программа скомпилируется без ошибок (так было, как минимум, в старых компиляторах), и будет удален только первый элемент массива, что приведет к утечке памяти.



Так же в этом разделе:
 
MyTetra Share v.0.67
Яндекс индекс цитирования