Обратите внимание, что
int *i
не полностью взаимозаменяемы с
int i[]
Это можно увидеть в том, что скомпилируется следующее:
int *i = new int[5];
во время этогоне будет:
int i[] = new int[5];
Во-вторых, вы должны дать ему список конструкторов:
int i[] = {5,2,1,6,3};
Вы также можете проверить с помощью формы []:
int *i = new int[5];
int *j = &(i[1]);
delete j;
компилирует предупреждение бесплатно, а:
int i[] = {0,1,2,3,4};
int j[] = {i[1]};
delete j;
выдаст предупреждения:
предупреждение C4156: удаление выражения массива без использования формы массива «delete»;предупреждение о замене массива C4154: удаление выражения массива;преобразование в предоставленный указатель
В обоих последних двух примерах произойдет сбой приложения, но вторая версия (с использованием типа объявления []) выдаст предупреждение о том, что вы стреляете себе в ногу.
(Win32 консольный проект C ++, Visual studio 2010)