Рассмотрим:
delete new std :: string [2];
delete [] new std :: string;
Всем известно, что первая ошибка. Если вторая ошибка не была, нам не нужны два разных оператора.
Теперь рассмотрим:
std :: unique_ptr <int> x (new int [2]);
std :: unique_ptr <int> y (new int);
Знает ли x
использовать delete[]
в отличие от delete
?
Предыстория: этот вопрос всплыл у меня в голове, когда я думал, что квалификация указателей на тип массива будет удобной функцией языка.
int *[] foo = new int [2]; // OK
int * bar = new int; // OK
delete [] foo; // OK
delete bar; // OK
foo = new int; // Compile error
bar = new int[2]; // Compile error
delete foo; // Compile error
delete [] bar; // Compile error