How the compiler differentiates delete[] and delete?