I did some research after learning new, unlike malloc() which I am used to, does not return NULL for failed allocations, and found there are two distinct ways of checking whether new had succeeded or not.  Those two ways are:
try
{
    ptr = new int[1024];
}
catch(std::bad_alloc& exc)
{
    assert();
};
and
ptr = new (std::nothrow) int[1024];
if(ptr == NULL) 
    assert();
I believe the two ways accomplish the same goal, (correct me if I am wrong of course!), so my question is this:
which is the better option for checking if new succeeded, based entirely on readability, maintainability, and performance, while disregarding de-facto c++ programming convention.