Operator new throws an exception of type std::bad_alloc when it fails to allocate the requested amount of memory. Yet in some circumstances, or due to performance considerations, throwing an exception may be undesirable. Standard C++ supports an exception-free version of operator new for that purpose. Rather than throwing an exception , the exception free version of new returns a null pointer in case of failure:
#include using namespace std;void f () {int * p new (nothrow) int; //exception free newif (p!= NULL)//must check returned pointer of nothrow-new{//...do something with p}}
Object nothrow is defined (and created) in the
extern const nothrow_t;
nothrow_t itself is defined like this:
struct nothrow_t {}; //empty class
In other words, nothrow_t serves as dummy argument allowing the overloading of global new.