The code you propose is not exception-safe, and the alternative:
std::vector foo( 125 );
// no delete necessary
is. And of course, the vector knows the size later, and can
do bounds checking in debug mode; it can be passed (by reference
or even by value) to a function, which will then be able to use
it, without any additional arguments. Array new follows the
C conventions for arrays, and arrays in C are seriously broken.
As far as I can see, there is never a case where an array new
is appropriate.