Verdict: Highly recommended.
This book is, as the title gives away, about good software design. It explains what software design is and that includes design goals like design for change, testability and extension. It looks in great depth at the advantages and disadvantages of different design approaches. It then looks at different design patterns that are described in detail, looking at them from different angles with different ways of implementing them and how we can find them in e.g. the C++ standard library or other examples.
It has 11 chapters and each of them give different guidelines which can also be found in the table of contents so that you can quickly find them again later. The first chapter talks about the art of software design, the following chapter about the art of building abstractions and the third one about the purpose of design patterns.
The following chapters look at different design patterns in great depth: Visitor, Strategy, Command, Adapter, Observer, CRTP, Bridge, Prototype, External Polymorphism, Type Erasure, Decorator and Singleton. It looks at these from different perspectives to previous books about design patterns that I’ve read.
This should not be your first book on C++ but for every non beginning C++ developer from every experience level there is a lot to learn and think about, highly recommended! I can also highly recommend videos from conference talks from Klaus Iglberger which are good introductions to what is described in much more detail in the book.
Website: https://www.oreilly.com/library/view/c-software-design/9781098113155/