int* a = new int[5] - 1;
This line by itself invokes undefined behavior according to the C++ standard because a is an invalid pointer and not one-p
Either way, a well-defined, zero-overhead way of creating a one-based array is the following:
int* a = new int[6];
There, problem solved. ;-) (But interesting question still.)