I've got a bunch of books lying around that I've never had a chance to thoroughly read through; every once in a while, I pick one up and read a chapter. Sometimes, like with "General Lattice Theory" by George Grätzer, I try to sprint through a chapter or two just to get a general introductory feel for a subject that I have not yet had much exposure to - after all, one cannot really hope to fully come to terms with an abstract subject matter without dedicating a reasonable amount of time to reading it and tirelessly working through some exercises. I feel that it's good to survey areas of science and engineering with which one has little familiarity, if only to receive a first taste for the material, to have something to contemplate and internalize for a few days, and most importantly, to humble oneself.
Two years ago, I acquired "Inside the C++ Object Model" by Stanley Lippman. The book is a little dated (it was published in 1996), but it remains fairly relevant nonetheless. Back in 2009, the book was more than a little beyond my ability to take in, but I have since then have had much experience with C++ and many of its bizarre features: Multiple inheritance, virtual base classes, pointers-to-member-functions, etc. Thoroughly exhausted with abstract mathematics (at least for a few days), I found myself wanting something a bit more concrete and decided to try my hand reading the book once more.
I have so far read only through the first chapter out of seven, but it has certainly been a pleasure. The book elucidates the truth behind several misconceptions about C++ and is ruthlessly, but necessarily, precise in its description of C++'s memory model for object-oriented programming. Lippman even takes the time to discuss the pros and cons behind alternative memory models which could achieve similar goals, and rationalizes why C++'s model is the way that it is.
C++ is something of an anomaly as a programming language. It's a systems language (yes it is, Steven!). It's an object-oriented language. It's a high-level language. It's a low-level language. It's procedural. It's generic. Hell, thanks to template-metaprogramming, it can even be functional! And yet every one of these adjectives comes with a caveat.