A: No. (Excluding if you have an old compiler, you might have to force the new operator to throw an exception if it runs out of memory.)
This turns out to be a real pain to always write down explicit NULL tests after each new allocation. Code like the following is extremely tedious:
Fred* p = new Fred();
if (p == NULL)
throw std::bad_alloc();
If your compiler doesn't support (or if you reject to use) exceptions, your code may be even more tedious:
Fred* p = new Fred();
if (p == NULL) {
std::cerr << "Couldn't allocate memory for Fred" << std::endl;
abort();
}
In C++, if the runtime system can't allocate sizeof(Fred) bytes of memory throughout p
= new Fred(), a std::bad_alloc exception will thrown. Unlike malloc(), new never returns
NULL!
Then you should simply write:
Fred* p = new Fred(); // No require to check if p is NULL
Though, if your compiler is old, it might not yet support this. Determine by checking your compiler's documentation under "new". If you hold an old compiler, you might have to force the compiler to have this behavior.
Note: If you are using Microsoft Visual C++, to obtain new to throw an exception while it fails you have to #include some standard header in at least one of your .cpp files. For instance, you could
#include (or or or ...).