Кресты / Говнокод #695 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
bool CUser::IsFavorite(const CGuid &guid)
{
 ASSERT(this);
 if(!this )
  return false;
...
}

Запостил: guest guest, (Updated )

Комментарии (8) RSS

  • Проходим:
    Это на случай вызова как статического?
    Ответить
  • А где говнокод? Или никто из здешних ни разу не участвовал в разработке проекта на C++ больше 100000 строк?
    Ответить
  • И в чём говнокод? Ассерт не гарантирует отсутствие ошибки, так как в релизе не работает. Уж лучше детерминированное поведение (с выводом ошибки и корректным завершением), чем неопределённое, так как дальнейший код полагается на этот ассерт.
    Ответить
  • [quote=Говногость]А где говнокод? Или никто из здешних ни разу не участвовал в разработке проекта на C++ больше 100000 строк?[/quote]
    Участвую. Но там такого нет.

    if(!this ) return false; - Это говнокод, как бы намекающий что аффтар знает, что CUser::IsFavorite вызывается для нулевого указателя, но не в состоянии этот баг пофиксить.
    Ответить
  • Так как assert написан большими буковками, то это как бы намекает. По моему нет ничего общего с говнокодом, если assert - макрос или другая функция, не делающая то что делает assert() в <assert.h>. Насчет статической функции - компилятор не позволит использовать this в статических функциях. Далее в защиту данного кода: если конструктор данного класса вызывает исключение, то! о-ля-ля this == NULL в любом из его методов. Хотя мне искренне кажется маловероятным тот факт, что автор кода применял данный код для обработки такой ситуации.
    Ответить
  • ГовноКодер:
    this == NULL обычно, если вызвать функцию так:
    TClass* obj=NULL;
    obj->Function();
    Ну или что-то в таком духе.
    Вот в функции Function() как раз и будет this==NULL.
    Ответить
  • Ну это может и прокатило бы для методов типа Release(), где delete this, чтобы не проверять указатель на 0 перед вызовом. Но все равно нехорошо так делать.
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8