Can I drop the  while deleteing array of some built-in type (char, int, etc)?
A: No. you can't
Sometimes programmers think that the  in the delete p only present so the compiler will call the suitable destructors for all elements in the array. Due to this reasoning, they suppose that an array of some built-in type such as char or int can be deleted without the . For example they suppose the following is valid code:
void userCode(int n)
char* p = new char[n];
delete p; // ERROR! Should be delete p !
However the above code is wrong and it can cause a blow at runtime. Particularly, the code that's called for delete p is operator delete (void*), however the code that's called for delete p is operator delete(void*). For the latter the default behavior is to call the former, however users are allowed to replace the latter along with a different behavior (in which case normally they would also replace the corresponding new code in operator new(size_t)). If they replaced the delete code thus it wasn't compatible along with the delete code, and you called the wrong one (that means if you said delete p instead of delete p), you could end up with a disaster at runtime.