#cpp
Если динамический массив создается (через new) внутри какого-то блока кода, например,
внутри if, то освобождение памяти через delete нужно производить внутри этого же блока?
if (count != 0)
{
int *masPos = new int[count];
int *masNeg = new int[n - count];
//...
delete [] masPos;
delete [] masNeg;
}
Ответы
Ответ 1
Это не имеет принципиального значения. int *masPos = NULL; if (something) { masPos = new int[10]; } ... if (masPos) { delete [] massPos; } Как правильно заметили выше, нужен только указатель на массивОтвет 2
Если динамический массив создается (через new) внутри какого-то блока кода, например, внутри if, то освобождение памяти через delete нужно производить внутри этого же блока? Нет конечно же. И в этом вся "соль" использования динамической памяти (не вся соль, я вру, но часть истины в этом выражении имеется). Вы сами определяете когда вам нужно удалить либо создать определенный объект, вы вручную (либо же автоматически, по заданному условию) можете управлять его временем жизни. Одним словом, время жизни объекта, выделенного и сконструированного при помощи вызова new определяется только вами, как программистом. Обратите внимание, сконструированного, ибо сишная функция malloc только аллоцирует (выделяет) память под объект (переменную), но не производит конструирования объекта. По выходу за пределы блока никакого автоматического удаления и деструкции объекта не произойдет, если, правда, конечно, вы не используете smart ptr'ы, но это уже совсем другая история. А вот объектам и типам, создаваемым в стеке, к сожалению, жить можно только в пределах блока {}. Плюс, стек (кадр стека), как правило, имеет ограниченный, и зачастую небольшой объем (зависит от настроек ОС ибо же вручную определяется программистом), что тоже может служить ограничением.
Комментариев нет:
Отправить комментарий