Foundations of Programming(pdf) - A great little book about good program design.

The Little Book of Semaphores (pdf) - Synchronisation patterns for Multi-threading. Uses semaphores, so not directly applicable to C++ which uses mutexes, but the principles are the same.

The Visitor Pattern Explained - Widely recognised as the most difficult design pattern to understand. This is the best explanation you will ever find - as tested on my daughter-in-law who is only interested in Window-shopping.

Transaction Pattern A transaction is a block of code that must either succeed with out error, or leave the object state untouched. This requires that any statements that have already been executed must be reversed if a failure occurs in a later statement. If all the statements are of the same type, such as task-object calls on a database, this is easily achieved by wrapping the tasks in a RAII class and having the RAII destructor either commit or call rollback on the operation. But where the statements are unrelated it is much easier to use a scope-guard. See this link for full details.

Design Patterns Explained

Design Patterns Cheatsheet

Multi-Paradigm Analysis - Summary

Multi-Paradigm Analysis - full paper