Как интеллектуальные указатели выбирают между удалением и удалением []?

Учтите:

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 ?


Справочная информация: этот вопрос всплыл в моем head, когда я подумал, что определение типа массива указателей будет удобной функцией языка.

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
33
задан Brian Tompsett - 汤莱恩 19 August 2015 в 19:30
поделиться