p и p + 1 указывают на разные места, как вы правильно сказали sizeof(*p)
единицы. Вы не можете удалить то, что не было выделено, но, например:
A* p = new A();
p++;
delete p-1;
удалит исходное распределение. Удаление p + 1, когда p + 1 не было выделено изначально, не определено; Глеб всплывает с:
*** glibc detected *** free(): invalid pointer: 0x0804b009 ***
Реализация не может обнулять p + 1, потому что p + 1 не является переменной для изменения. В этом пункте говорилось, что
delete p;
можно перевести на
free(p);
p = 0;
Это не имеет смысла с p + 1