Начал читать. Много разумных рекомендаций из различных учебников собраны в одном месте.
В самом начале нашел потенциальный источник труднообнаружимых ошибок. Рекомендуют использовать побольше forward declaration и поменьше включений стронних файлов. В принципе, если используются декларировать только имена классов, то ничего фатального случиться не должно. Им бы запретить делать forward declaration функций и глобальных переменных.
Я однажды так попал - в очередной версии разработчики изменили тип переменной, причем новый тип занимает в памяти меньше места. Это изменение внесли в заголовочный файл, а декларация в другом заголовочном файле осталась без изменений. в результате из разных мест программы к этой переменной обращаются по-разному, и портится соседняя память. Испорченная соседняя память давала самые разные эффекты, почти произвольные. Ошибку искали четыре дня. Потом долго разговаривали о том, что так писать нельзя. Разговаривали, понятно, матом
аналогичные проблемы были как-то раз с функцией - авторы поменяли порядок аргументов в основном заголовке, а в forward declarations забыли. Хорошо, что у нас были сорсы, и в отладчике сразу увидели, что аргументы стали другими, а без этого искали бы пару дней.
Резюме: я бы поостерегся делать forward declarations пока не уверен на 200% процентов, что изменений не будет.