Ответ 1
Вот один список. Если бы мне пришлось выбирать пару, я мог бы пойти с Curiously Recurring Template Pattern или Virtual Contructors.
Какие идиомы С++ должны знать программисты на C++?
Идиомами С++ я имею в виду шаблоны проектирования или способ выполнения определенных вещей, которые применимы только для С++ или более применимы для С++, чем большинство других языков.
Почему нужно использовать идиомы, и что делают идиомы?
Вот один список. Если бы мне пришлось выбирать пару, я мог бы пойти с Curiously Recurring Template Pattern или Virtual Contructors.
На сегодняшний день единственным наиболее важным "образцом" для изучения и понимания того, что (почти) уникальным для С++ является RAII (Инициализация ресурсов).
Изменить: (Чтобы ответить на дополнительный вопрос, отредактированный в вопросе). Вы используете RAII в первую очередь для (полуавтоматического) управления ресурсами. Наиболее очевидное использование - освобождение ресурсов, принадлежащих объектам, когда объекты-владельцы выходят за рамки, такие как освобождение памяти или закрытие файлов.
PIMPL, aka P на IMPL ementation?
Метапрограммирование шаблонов. Это здорово, потому что это в основном компиляция утиного ввода, так что вы получаете большую гибкость утиного ввода со скоростью статического ввода.
Если вы хотите получить максимальную отдачу от STL, то итераторы и функторы/объекты функций являются важными идиомами. Использование итераторов также неявно зависит от идиомы "полуоткрытого диапазона".
Эксплуатация Strong Typing и правильность const
также чрезвычайно полезна.
Я также запрещаю конструкторы копирования по умолчанию и операторы присваивания. Я на самом деле выхожу за рамки этого, но они самые распространенные. Я думаю, что жизнь будет проще, если они не будут подразумеваться.
RAII, COW, pimpl, закон demeter (не уверен, можно ли классифицировать как идиому), черты и политики типа. (COW и закон demeter не ограничиваются только С++)