В одной функции. Я создаю локальную привязку. char arr[20];
И до конца этой функции. Будет ли компилятор делать сборку мусора для меня? Или мне нужно сделать delete
?Нужно ли мне явно удалять массивы в C++ для сохранения памяти?
спасибо.
В одной функции. Я создаю локальную привязку. char arr[20];
И до конца этой функции. Будет ли компилятор делать сборку мусора для меня? Или мне нужно сделать delete
?Нужно ли мне явно удалять массивы в C++ для сохранения памяти?
спасибо.
В C++ отсутствует сбор мусора.
Однако, если вы используете автоматические переменные, они будут уничтожены, когда они выйдут из сферы действия.
Как правило, должно быть указано 1 delete
для каждого new
. Если у вас нет new
, вы не найдете delete
.
Вам не нужно удалять этот массив с момента его создания в стеке. Если вы создали массив, используя новый, вам придется использовать delete для очистки.
Переменные существуют только в пределах функции, в которой они определены. Когда эта функция завершается, они исчезли. Нужно только delete
/ваших переменных, если вы вручную выделили память командой new
или malloc
.
Любые локальные переменные (включая массивы) создаются в стеке и поэтому возвращаются после возвращения функции.
Вы можете думать об этом, подобном сбору мусора, но детали очень разные. Если вы выполняете больше какого-либо программирования, вы должны узнать больше о других языках (это похоже на большинстве языков).
Нет, вам не нужно ничего делать с вашим локальным массивом.
Локальные переменные уничтожаются в конце блока (необязательно функция), в которой они созданы. Например:
void myfunc() {
int x[some_size];
if (something) {
std::vector<std::string> y;
// ...
} // y will be destroyed here
// more code
} // x will be destroyed here
Если вы хотите, чтобы ваш массив уничтожен раньше, чем на выходе из функции, вы можете использовать тот же:
void f() {
// come code here
{
int x[size];
// code that uses x
} // `x` gets destroyed here
// more code
}
Я должен добавить, однако, что разрушив переменная в этой точке может не повлиять на использование памяти. Память не необходима после выхода из внутреннего блока, но она также не может быть немедленно выпущена.
С другой стороны, если вы используете что-то вроде std::vector
вместо явного динамического распределения, уничтожив объект будет (немедленно) освободить память, которая в настоящее время используется для хранения данных объекта.
-1: вы не «удаляете» то, что у вас есть «malloc». Кроме того, вы не должны «malloc» на C++ в первую очередь. –
Да, я знаю. Вы 'free' вещь, которая' malloc'ed. В этом случае я не собирался буквально удалять, просто идея освободить выделенную память. И вы правы, вы не должны использовать 'malloc' на C++, но иногда люди делают это, я полагаю, что я коснусь его. –