Note: marked as community wiki.
In recent days, I\'ve realized how little I know about C++.
Besides:
I think this should cover it:
More C++ Idioms - Wikibooks
Basic:
Also useful:
Useful for brainfucking or in special cases:
The way I used to improve my c++ is reading the source code of leveldb. Because leveldb is a product level code. So you can learn the cpp idiom and design pattern from a real product. Let me show you some example
Leveldb use the Pimpl idiom, almost in all of it's head file, such table.h table_build.h write_batch.h. You can learn from the code directly
Leveldb use many OO design pattern, such as build pattern, the table have the table_build class to build the table, the block have the block_build class to build the block
Leveldb also use the Iterator pattern, the iterator make us use leveldb more convenient.
So I think leveldb contain many idiom or design pattern that c++ engineer should know.
The first two are 'must know' for a good C++ programmer. 'Good C++ programmers' do not overload operators for fun.
(hardly a must-know, but still useful) Writing domain-specific languages with operator overloading and template metaprogramming (see Boost.Spirit for a nice example) - but this is the kind of thing that makes shooting yourself in the foot easy, too.