Передача аргументов в функцию
Существуют четыре способа передачи аргументов:
- По значению
- По указателю
- По ссылке
- По rvalue-ссылке (для перемещаемых объектов)
В целях повышения безопасности и производительности, рекомендуется:
- объекты размером до 16 байт (включительно) передавать по значению (https://pvs-studio.ru/ru/docs/warnings/v835/)
- избегать передачи по указателю
- использовать ссылки (неконстантные) для возврата значений из функции
- использовать константные ссылки для возможности передавать временные объекты в функцию
- использовать rvalue-ссылки для прямой передачи объектов (для перемещения)
Использование указателей в качестве параметров функций
Потенциальная проблема: лишние проверка или неправомерный доступ к памяти (AV, segfault)
Неправильно:
В плюсах есть ссылки, которые более безопасны, и позволяют избегать ситуации с использованием нулевого указателя. Например:
Если нужно использовать нулевые указатели, то исходный указатель заворачиваются в std::unique_ptr и уже этот объект передается по ссылке.