Код правильный (хотя обычно он не является частью хорошо написанной современной программы на C ++).
Динамически размещенные массивы хранятся со скрытой информацией об их размере, поэтому delete[] p
знает, сколько элементов нужно удалить.
Если вам интересно узнать подробности, вы можете настроить небольшой тестовый класс и воспользоваться преимуществами операторов распределения членов:
struct ArrayMe
{
static void * operator new[](size_t n) throw(std::bad_alloc)
{
void * p = ::operator new[](n);
std::cout << "new[]ed " << n << " bytes at " << p << "." << std::endl;
return p;
}
static void operator delete[](void * p, std::size_t n) throw()
{
std::cout << "delete[]ing " << n << " bytes at " << p << "." << std::endl;
::operator delete[](p);
}
double q;
};
Теперь скажите:
std::cout << "sizeof(ArrayMe) = " << sizeof(ArrayMe) << std::endl;
ArrayMe * const a = new ArrayMe[10];
delete[] a;