2012-05-10 1 views

ответ

22

В C++ отсутствует сбор мусора.

Однако, если вы используете автоматические переменные, они будут уничтожены, когда они выйдут из сферы действия.

Как правило, должно быть указано 1 delete для каждого new. Если у вас нет new, вы не найдете delete.

3

Вам не нужно удалять этот массив с момента его создания в стеке. Если вы создали массив, используя новый, вам придется использовать delete для очистки.

-1

Переменные существуют только в пределах функции, в которой они определены. Когда эта функция завершается, они исчезли. Нужно только delete/ваших переменных, если вы вручную выделили память командой new или malloc.

+0

-1: вы не «удаляете» то, что у вас есть «malloc». Кроме того, вы не должны «malloc» на C++ в первую очередь. –

+0

Да, я знаю. Вы 'free' вещь, которая' malloc'ed. В этом случае я не собирался буквально удалять, просто идея освободить выделенную память. И вы правы, вы не должны использовать 'malloc' на C++, но иногда люди делают это, я полагаю, что я коснусь его. –

1

Любые локальные переменные (включая массивы) создаются в стеке и поэтому возвращаются после возвращения функции.

Вы можете думать об этом, подобном сбору мусора, но детали очень разные. Если вы выполняете больше какого-либо программирования, вы должны узнать больше о других языках (это похоже на большинстве языков).

Нет, вам не нужно ничего делать с вашим локальным массивом.

2

Локальные переменные уничтожаются в конце блока (необязательно функция), в которой они созданы. Например:

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 вместо явного динамического распределения, уничтожив объект будет (немедленно) освободить память, которая в настоящее время используется для хранения данных объекта.

Смежные вопросы