При программировании я использую assert, а также проверку указателя NULL.
Но насколько я знаю, assert будет полезен только в режиме DEBUG.
Мой вопрос заключается в том, что у меня есть внутренний указатель, который, я уверен, не может быть функцией примера NULL, возвращающей указатель (но указатель не является членом класса), в таких случаях я могу использовать assert
test* ptr = fun(); // return a pointer of type test
assert(ptr);
//do some operation
или проверка указателя NULL
test* ptr = fun(); // return a pointer of type test
assert(ptr);
if (NULL != ptr)
{
//do some operation
}
Вот какая практика кода хороша. Насколько я понимаю, это будет вторая. Потому что я столкнулся с некоторыми ситуациями, когда значение ptr возвращает NULL из-за некоторых ненормальных случаев, о которых мы даже не можем подумать.
Но есть ли у нас другие лучшие варианты?
assert()
, делайте оба в согласии.assert(ptr && "Unexpected NULL pointer"); if (ptr) {...}
. Выбор only assert() игнорирует причину, по которой вы утверждаете в первую очередь в релизных сборках, и выбираете только if (ptr) скрывает неожиданное, с которым вы педантично начинаете в сборках отладки. - person WhozCraig   schedule 11.01.2013false
, ненулевое значение подразумеваетtrue
для целей логической оценки. Честно говоря, это вопрос вкуса на данный момент в языках C и C++ уже многих поколений. Каждому свое. - person WhozCraig   schedule 11.01.2013