It's pretty near impossible to write robust code in modern C++ without knowing about exception safety issues. Period.
If you use the C++ standard library, including even just new , you have to be prepared for exceptions. This section builds on the corresponding section of Exceptional C++ and considers new issues and techniques, such as, What's std:: uncaught_exception() , and does it help you to write more-robust code? Does exception safety affect a class's design, or can it just be retrofitted as an afterthought? Why use manager objects to encapsulate resource ownership, and why is the "resource acquisition is initialization" idiom so important for writing safe code?
But first, let's get our feet wet by considering an exception safety lesson that also demonstrates the deeper meaning of key fundamental C++ concepts: What does construction mean, and what is an object's lifetime?