Вы создали два двумерных массива 4х4, выделив 2 * sizeof(int) * 4 * 4 памяти.
void main(){
const int size = 4;
int** a = new int*[4];
int** b = new int*[4];
for (int i = 0; i != 4; i++){
a[i] = new int[4];
b[i] = new int[4];
...
}
...
Но, вызывая
delete a;
delete b;
Освободится лишь 2 * sizeof(int*) * 4 памяти, а та память, которая выделялась по a[i] = new int[4] утечет.
Для того, чтобы корректно освободить все ресурсы, необходимо будет делать так:
for (int i = 0; i < 4; i++) {
delete[] a[i];
delete[] b[i];
}
delete[] a;
delete[] b;
Почему при создании массивов через new[] нужно использовать delete[], будет понятно после изучения наследования и механизма работы виртуальных деструкторов. Если забыть [] после delete, можно снова получить утечку ресурсов. По счастливому стечению обстоятельств, для массивов из примитивов разницы между delete и delete[] нет, но это не значит, что можно этим пренебрегать.
Также, не стоит забывать про то, что может выскочить исключение std::bad_alloc.
Вообще, для управления памятью лучше всего использовать подход RAII.
Да, в общем-то, то же самое, о чем и статья. Капсулы с частицами, которые от магнитного пера переворачиваются и прозрачная ячейка становится тёмной. Просто размер «пикселей» больше.
В поддержку hungry_ewok, слоны — действительно такие. Замечу, что аналогичное выражение на английском языке появилось пораньше и звучит как «like a bull in a china shop», что приблизительно переводится: «как бык в фарфоровом магазине», а это уже гораздо ближе к природной истине. И почему в России так слонам не повезло?
Но, вызывая
Освободится лишь 2 * sizeof(int*) * 4 памяти, а та память, которая выделялась по a[i] = new int[4] утечет.
Для того, чтобы корректно освободить все ресурсы, необходимо будет делать так:
Почему при создании массивов через new[] нужно использовать delete[], будет понятно после изучения наследования и механизма работы виртуальных деструкторов. Если забыть [] после delete, можно снова получить утечку ресурсов. По счастливому стечению обстоятельств, для массивов из примитивов разницы между delete и delete[] нет, но это не значит, что можно этим пренебрегать.
Также, не стоит забывать про то, что может выскочить исключение std::bad_alloc.
Вообще, для управления памятью лучше всего использовать подход RAII.