Рано или поздно в программах на C/C++ приходится использовать передачу аргументов в функцию по указателю. Примером может служить хотя бы тот же const char*
при использовании библиотек доступа к базам данных:
void Execute(const char* sql_statement);
Бывают и случаи передачи объектов и примитивных типов по указателю.
Проверка параметров на NULL
Мне хотелось бы рассказать про то, что наверняка делают многие программисты на C и C++: проверяют входной параметр-указатель на NULL (nullptr):
void Execute(const char* sql_statement) { if (sql_statement == nullptr) { throw std::invalid_argument("Null SQL Statement"); }
Кроме варианта с исключением есть так же вариант с assert(sql_statement).
В данном случае оба варианта, скорее всего, ошибочны по своей сути и подлежат удалению из кода.
Причина здесь проста: указатель может содержать множество «невалидных» значений. Если вы считаете, что указатель невалиден только когда его значение NULL (nullptr), то вы ошибаетесь.