Стандарты программирования на С++
Предпочитайте предоставление абстрактных интерфейсовОткрытое наследование означает
Обсуждение
Практикуйте безопасное перекрытие
Виртуальные функции стоит делать неоткрытыми, а открытые — невиртуальными
Избегайте возможностей неявного преобразования типов
Делайте данные-члены закрытыми (кроме случая агрегатов в стиле структур C)
Не допускайте вмешательства во внутренние дела
Разумно пользуйтесь идиомой Pimpl
Предпочитайте функции, которые не являются ни членами, ни друзьями
New и delete всегда должны разрабатываться вместе
При наличии пользовательского
Конструкторы, деструкторы и копирование
Определяйте и инициализируйте переменные-члены в одном порядке
В конструкторах предпочитайте инициализацию присваиванию
Избегайте вызовов виртуальных функций в конструкторах и деструкторах
Делайте деструкторы базовых
Деструкторы, функции освобождения ресурсов и обмена не ошибаются
Копируйте и ликвидируйте согласованно
Явно разрешайте или запрещайте копирование
Избегайте срезки. Подумайте
Предпочитайте канонический вид присваивания
Обеспечьте бессбойную функцию обмена
Пространства имен и модули
Храните типы и их свободный интерфейс в одном пространстве имен
Храните типы и функции в разных
Не используйте using для пространств
Избегайте выделения и освобождения памяти в разных модулях
Не определяйте в заголовочном файле объекты со связыванием
Не позволяйте исключениям пересекать границы модулей
Используйте достаточно переносимые типы в интерфейсах модулей
Шаблоны и обобщенность
Разумно сочетайте статический и динамический полиморфизм
Выполняйте настройку явно и преднамеренно
Не специализируйте шаблоны функций
Пишите максимально обобщенный код
Обработка ошибок и исключения
Широко применяйте assert для документирования внутренних допущений и инвариантов
Определите разумную стратегию обработки ошибок и строго ей следуйте
Отличайте ошибки от ситуаций, не являющихся ошибками
Содержание раздела