Это динамическое распределение памяти? - PullRequest
1 голос
/ 08 января 2009

Простой вопрос: мне нужно delete или delete [] c? Язык имеет значение?

char c[] = "hello"

Ответы [ 4 ]

12 голосов
/ 08 января 2009

Правило в C ++ заключается в том, что вы используете delete[] всякий раз, когда вы используете new[], и delete всякий раз, когда вы используете new. Если вы не используете new, как в вашем примере, вам не нужно ничего delete.

В вашем примере шесть байтов для массива c выделяются в стеке, а не в куче, если они объявлены внутри функции. Поскольку эти байты находятся в стеке, они исчезают, как только возвращается функция, в которой они объявлены.

Если это объявление находится вне какой-либо функции, то эти шесть байтов выделяются в области глобальных данных и остаются в течение всего времени жизни вашей программы.

12 голосов
/ 08 января 2009

В c ++ это не динамическое распределение памяти. Нет delete[] будет необходимо.

Ваш пример, по сути, является сокращением для этого:

char c[6]={'h','e','l','l','o','\0'};
2 голосов
/ 08 января 2009

вы динамически распределяете память, когда кладете что-то в кучу. здесь вы размещаете переменную в стеке. Если бы вы использовали оператор new или вызов malloc, вы бы поместили переменную в кучу.

вам нужно использовать delete (w / new) или free (w / malloc), чтобы освободить память в куче. стек будет освобожден автоматически, когда функция / метод вернется.

1 голос
/ 08 января 2009

Нет, размер массива во время компиляции.

...