Данные правила вырабатывались как самостоятельно, так и под влиянием книжек, статей в интернете, обсуждения на SO и RSDN. Но общее в них одно: они выкристолизовывались на практике. Они постоянно в ходу у меня и помогают в нелёгкой жизни программиста. Многие из них применимы к Embedded, а не только к мощным машинам с большими объёмами ресурсов.
Про указатели
- Не используйте указатели пока есть возможность. Используйте ссылки.
- Если без использования указателя никак не обойтись, постарайтесь использовать умные указатели. Даже API которое вернёт указатель, можно завернуть в умный с нужным deleter’ом.
- Используйте
std::unique_ptr
вместоstd::shared_ptr
пока это возможно. Всегда возможно превратитьunique_ptr
вshared_ptr
(ценой того, что для контрольного блока будет выделен отдельный кусок памяти). - Но если в каких-то деталях реализации приходится наворачивать сложные схемы при работе с умными указателями - используйте сырые, но тщательно покройте код тестами и проверками. Не давайте доступа к таким деталям наружу - всё, что может сломаться, рано или поздно сломается.
std::vector
иstd::array
, а так жеstd::string_view
/boost::string_view
/std::span
ваши хорошие друзья.
Const correctness
- Немутабельные объекты могут быть безопасно доступны из разных потоков. Для них не нужно синхронизации. Тоже относится к константным методам.
- В общем, используйте const пока это возможно.