It is a very good book, although a little dated. It explains a lot of items in <<effective c++>> and <<More effective c++>> in more details, it tells you how to do the things, and why to do in this way.
It discusses many idioms, which are the low level equivalences of patterns (see <<Design Patterns>>), for example, body/handle idiom is equivalent to bridge pattern, examplar is equivalent to prototype pattern, envelope/letter is related to state pattern, ... Orthodox Canonical class form is called "big three" in <<c++ faqs>> ... Overloading subscripting for class File and FileRef on page 51 gives the idea of proxy for distinguishing reads from writes presented in <<More effective c++>>, but <<More effective C++>> gives a more detailed discussion on limitations etc (it's normal since <<More>> appeared much later). It provides interesting discussion about difference of performance between different string implementations (p58 -- p65). It discusses relations between pointer to member functions, functors and virtual functions (2.10 and 5.6), and explains the power of polymorphism. It discusses "Dynamic inheritence" in chapter 10, which is not supported directely in C++ (related to state pattern).
Overall, this book provides a lot of original c++ ideas, which affected the later books as <<(More) Effective C++>> and <<Design patterns>> very much.
It is more like a book, while <<(More) effective c++>> and <<Design patterns>> are more like a reference. It contains exercises (no solutions) at the end of each chapter, while <<(More) effective c++>> and <<Design patterns>> do not.
Some discussions are interesting, but not completely correct (it is understandable because of its publishing year), for example, reference counting to implement string class, when shouldn't we use this idiom and how we can improve it? See further discussion of reference counting for string using flags "shared", "sharable" in <<More effective C++>>. Testing self assignment is a good thing, however, is it away necessary? No. You can simply allocate new memory before desallocate old memory, if you avoid self assignment test, you probably not only improve the performance of your code, but also make it exceptionally safe (see <<Exceptional C++>>)
It lacks discussion for new features as namespace, exceptions, which you can find in <<More effective c++>> and <<Exceptional c++: 47 puzzles>>, STL can be found in a very good book <<The C++ Standard Library : A Tutorial and Reference>> as well. It lacks new style cast , for example, const cast and mutable can be used to make to difference between logical constness and physical constness, but at the time the book was writen, they did not exist yet (see 2.9, page 26 -- 28).
Implicite type conversion (3.4)is no longer considered as a good thing for string, read Item 39 of <<Exceptional C++>> on page 162 to see why (think about what will happen with or without implicit type conversion: string s1, s2, s3; s1 = s2 - s3). Imaginary is not Complex (p 89) as circle is not ellipse (see <<C++ faqs>>).
Enough said, I can not give a complete description of this book here. Overall, it is a very good book, although it lacks some new features (read <<(More) effective C++>>, <<Design patterns>>, <<Exceptional C++>>, <<The C++ Standard Library : A Tutorial and Reference>> and <<C++ faqs>>) and pay attention for errors inside. Email me for further discussion: firstname.lastname@example.org. Good luck and have fun!