Во время удаления компилятор не знает размер объекта, на который указывает temp
, но он не должен знать, и, следовательно, нет утечки.Например:
struct T { int t; };
struct U : public T { int u; };
T * temp = new U();
delete temp; // compiler doesn't know whether it's dealing with a T or a U
Забудьте сейчас о C ++ и просто рассмотрите C.
int * ptr = malloc(100);
free(ptr);
Этот код на C работает, хотя нам не нужно напоминать компилятору о том, насколько великнаш массив целых чисел был.
(Изменить: чтобы уточнить, что мы говорим здесь о времени удаления. Компилятор знает больше во время создания, чем во время удаления. Вопрос в том, "как система узнает,во время удаления сколько памяти удалить? ". Один ответ на http://c -faq.com / malloc / freesize.html )