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

    +929.1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    page_t* make_page()
    {
     page_t* p = new page_t;
     // заполнение
     return p;
     delete(p);
    }

    я в шоке... не знаю что хотел сказать аффтар (недоступен)... не могу даже прокомментировать ЭТО %)

    Запостил: zaufi, 11 Февраля 2010

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

    • Автор где-то услышал, что ресурсы нужно создавать и удалять в одном месте. А так как удалять объект по логике нельзя - переносим delete за return :-)
      +
      Ответить
      • В одном месте, это стопудов внутри составного оператора!
        {
        new
        delete
        }
        Ответить
      • из моего прошлого общения с аффтаром я думаю что врядли он вообще чтото слышал или читал про хорошие практики в С++... есть мнение что ему вообще неведомо "что такое хорошо и что такое плохо" в С++ и в программировании вообще... все что он понимает это "работает" или "не работает" -- и не важно (вообще, абсолютно, тотально не важно!) каким способом это достигнуто (к примеру, съеданием всей доступной памяти или на 100% занятым ЦПУ)... когда начинаешь с ним разговаривать мысли об убийстве приходят довольно скоро ;(
        Ответить
    • Вау, даже не знаю, что и сказать )
      Ответить
    • Это повышает читабельность кода.
      Ответить
    • Сильно.
      Отдал ресурс - удали.
      Хотя, однажды, я, будучи в трезвом уме и здравой памяти написал что-то в духе
      StringStream->Free();
      return StringStream->Size;

      Потом, когда оное вывалилось, пришлось сохранять значение в отдельной переменной.
      Ответить
    • «Перед прочтением сжечь»
      Ответить
    • ужас
      а вдруг ексепшн во время заполнения?
      неужели так трудно приучить себя использовать умные указатели?
      Ответить
    • Гениально)))))))
      Ответить
    • Чувак просто забыл написать конструкцию try catch finally :D
      Ответить
      • Боюсь чувак не знаком с этой конструкцией. Тут эльдорадо говнокода у этого чувака.
        Ответить
        • С ней никто не знаком. В «C++» нет никакого «finally».
          Ответить
          • BOOST_SCOPE_EXIT наиболее похож по смыслу на finally. Но он нинужен.
            Ответить
    • Вот из-за таких писак и приходится часами искать в проектах, которые приходилось дорабатывать, где же вылетает программа!
      Ответить
    • Видимо это комментарий на память, что надо делать с возвращаемым значением :)
      Ответить
    • В языках с генераторами было бы что-то типа:
      {
       page_t* p = new page_t;
       yield p; // вернём новый объект на первой итерации
       delete(p); // и удалим на второй
       yield nullptr;
      }
      Увы, в «C++» генераторов нет...
      Ответить
      • Есть ли языки с генераторами и без гц?
        Ответить
        • Кресты.
          Ответить
          • А как в них выглядят генераторы?
            Ответить
            • Наверно он имеет в виду парашу с итераторами.
              Ответить
              • Ванишед.
                Ответить
              • А сейчас бустовые корутины есть:
                void foo(boost::coroutine<int>::push_type &sink) {
                    while (true)
                        sink(42);
                }
                Ответить
                • Переведи на "PHP". Минут пять смотрел на этот код и нихуя в итоге не понял. Какие-то четвероточия, блядь, какие-то амперсанды, и всё это как-то по-дебильному расставлено.
                  Ответить
                • 1.5 секунды конпеляции этой поебени на почти 5ГГц проце - охуенно, конечно. И ошибки от опечаток в экран не влезают. Походу с корутинами лучше дождаться с++20.
                  Ответить
                  • Метушня течёт в нашем коде, раскаляя процы.
                    Ответить
                    • это что-то из азиатской культуры? цой?
                      Ответить
                      • > азиатской культуры

                        Угу. И этим самым boost'ом, ты Семён, пронзишь небеса!
                        Ответить
          • А почему петух написал, что увы, в с++ генераторов нет?
            Ответить
            • Пока драфт, но пилят.

              Будет что-то в духе:
              co_generator<int> foo() {
                  co_yield(42);
                  co_yield(100500);
              }
              Ответить
    • а не будет ворнинга, что код после ретурна?
      Ответить

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