System memory holds a special place in the hierarchy of program resources; its availability is the implied precondition for many innocuous lines of code, from
std::string::substr() to passing
std::function<> by value. The ability to always create another object is ingrained in the OOP mindset so much that it is often said that immediate termination is the cleanest way to handle memory allocation failures in most situations. Nevertheless, C++, when consistently applying
RAII, makes it possible to treat memory allocation exactly as any other resource acquisition.
To what degree do actual applications take advantage of that possibility and what responses to allocation failures are there in the wild? This presentation will examine over 300 open source projects that incorporate explicit handling for
std::bad_alloc, examine the causes (it’s not always “out of memory”), response strategies (it’s more than just rollback), and related practical considerations.