The C++ Standard library provides a base class specifically designed to declare objects to be thrown as exceptions. It is called exception and is defined in the <exception> header file under the namespace std. This class has the usual default and copy constructors, operators and destructors, plus an additional virtual member function called what that returns a null-terminated character sequence (char *) and that can be overwritten in derived classes to contain some sort of description of the exception.// standard exceptions#include <iostream>#include <exception>using namespace std;class myexception: public exception{ virtual const char* what() const throw() { return "My exception happened"; }} myex;int main () { try { throw myex; } catch (exception& e) { cout << e.what() << endl; } return 0;}output:My exception happened.We have placed a handler that catches exception objects by reference (notice the ampersand & after the type), therefore this catches also classes derived from exception, like our myex object of class myexception.All exceptions thrown by components of the C++ Standard library throw exceptions derived from this std::exception class. These are:exception descriptionbad_alloc thrown by new on allocation failurebad_cast thrown by dynamic_cast when fails with a referenced typebad_exception thrown when an exception type doesn't match any catchbad_typeid thrown by typeidios_base::failure thrown by functions in the iostream libraryFor example, if we use the operator new and the memory cannot be allocated, an exception of type bad_alloc is thrown:try{ int * myarray= new int[1000];}catch (bad_alloc&){ cout << "Error allocating memory." << endl;}It is recommended to include all dynamic memory allocations within a try block that catches this type of exception to perform a clean action instead of an abnormal program termination, which is what happens when this type of exception is thrown and not caught. If you want to force a bad_alloc exception to see it in action, you can try to allocate a huge array; On my system, trying to allocate 1 billion ints threw a bad_alloc exception.Because bad_alloc is derived from the standard base class exception, we can handle that same exception by catching references to the exception class:// bad_alloc standard exception#include <iostream>#include <exception>using namespace std;int main () { try { int* myarray= new int[1000]; } catch (exception& e) { cout << "Standard exception: " << e.what() << endl; } return 0;}