1. C++ / Говнокод #4593

    +164

    1. 1
    2. 2
    3. 3
    4. 4
    double *ptr = new (nothrow) double[n];
    if (ptr) {
    //....
    } else throw bad_alloc();

    Запостил: Sanya_M, 11 Ноября 2010

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

    • а в третье строке ещё assert(ptr!=NULL); не помешает
      Ответить
    • Я туплю и не понимаю, как связаны placement new, который вызывает конструктор по данному адресу и bad_alloc?

      Или в этом и есть суть говнокода?
      Ответить
      • http://www.cplusplus.com/reference/std/new/nothrow/

        Похоже суть только в том, что автор изобрел велосипед.
        Код эквивалентен

        double *ptr = new double[n];
        //....
        Ответить
        • Какая штука клевая. Век живи - век учись.
          Ответить
          • Вот посидишь на говнокоде и стандарт изучишь... Никогда не знаешь, чего сдесь найдешь...
            Ответить
    • Используй assert, будь плохим парнем!
      Ответить
    • Тут надо заметить, что подобный код вполне оправданно можно встретить в проектах написанных под не совсем корректные компиляторы (типа старого-доброго MSVC 6). Т.е. когда необходимо получить одинаковое и стандартное поведение кода как в старом, так и в новом компиляторе, приходится пользоваться подобными извращениями. Я не берусь судить, так ли это в данном случае - без контекста не понятно - но тем не менее...
      Ответить

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