C++, удалить [] foo и удалить foo

Я просто еще не могу привыкнуть к синтаксису C++..
любое интуитивно понятное объяснение

//delete [] foo
// and 
//delete foo[]

был бы очень признателен.
если быть более точным, скажем, у меня есть

int** foo = new int*[50]
for (int index = 0; index<50;++index)
     foo[index] = new int[50]

//foo = 2d 50x50 matrix
//now lets say i want to deallocate the memory of this matrix

for (index index=0;index<50;++index)
     delete[] foo[index]
delete[] foo

теперь я знаю, что мне нужно удалить все «внутренние» указатели, которые я выделил ранее, а затем удалить указатель на указатель.
но мой вопрос в том, для чего используется [] после удаления? я имею в виду, если вы оставляете его пустым все время, почему он вообще там? он получает какой-либо параметр несколько раз? или мы всегда просто delete[] foo?


person Itay.V    schedule 25.11.2016    source источник
comment
если вы используете new X[], то вы должны использовать delete[]   -  person Jonas    schedule 25.11.2016
comment
См.: stackoverflow.com/a/2486055.   -  person Jonas    schedule 25.11.2016
comment
Есть два разных оператора delete. Один для удаления отдельных объектов (delete) и один для удаления массивов объектов (delete[]). [] просто различал разные операторы delete.   -  person Galik    schedule 25.11.2016