April 2020
Intermediate to advanced
412 pages
9h 58m
English
Here, we defined the Complex class, and we intend to allocate instances of this class statically. To be safe, we need to make sure that neither the constructor nor the destructor of this class can throw exceptions.
However, both the constructor and the destructor invoke operations that may potentially throw exceptions. The constructor performs memory allocation, while the destructor writes logs to standard output.
The constructor allocates memory using the new operator, which throws an std::bad_alloc exception if memory can't be allocated. We use an std::nothrow constant to select a non-throwing implementation of new. Instead of throwing an exception, new will return nullptr if it can't allocate any memory:
ptr = new(std::nothrow ...