...
Object destructors are likely to be called during stack unwinding as a result of an exception being thrown. If the destructor itself throws an exception, having been called as the result of an exception being thrown, then the function std::terminate() is called with the default effect of calling std::abort() [ISO/IEC 14882-2014]. When std::abort() is called, no further objects are destroyed, resulting in an indeterminate program state and undefined behavior. Do not terminate a destructor by throwing an exception.
...
Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Astrée |
| destructor-without-noexcept delete-without-noexcept | Fully checked | ||||||
| Axivion Bauhaus Suite |
| CertC++-DCL57 | |||||||
| CodeSonar |
| LANG.STRUCT.EXCP.CATCH LANG.STRUCT.EXCP.THROW | Use of catch Use of throw | ||||||
| Helix QAC |
| C++2045, C++2047, C++4032, C++4631 | |||||||
| Klocwork |
| MISRA.DTOR.THROW | |||||||
| LDRA tool suite |
| 453 S | Partially implemented | ||||||
| Parasoft C/C++test |
| CERT_CPP-DCL57-a | Never allow an exception to be thrown from a destructor, deallocation, and swap | ||||||
| Polyspace Bug Finder |
| CERT C++: DCL57-CPP | Checks for class destructors exiting with an exception (rule partially covered) | ||||||
| PVS-Studio |
| V509, V1045 | |||||||
| RuleChecker |
| destructor-without-noexcept delete-without-noexcept | Fully checked |
...