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

    +1004

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    if (param["LOG"] != NULL) // пришли логи от плагина.
        {
            this->logs = new loger();
            this->logs->write(param["LOG"], param["TYPE"], this->Name, name);
            delete this->logs;
            return;
        }

    Так мы пишем логи

    Запостил: ir4y, 12 Января 2012

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

    • Что будет с памятью при исключении в logs->write?
      Ещё один аргумент в пользу принуждения к оборачиванию работы с ресурсами в отдельные классы.
      Ответить
      • > Ещё один аргумент в пользу принуждения к оборачиванию работы с ресурсами в отдельные классы

        И в чём тут будет выигрыш?
        Ответить
        • В безопасности кода
          Ответить
          • Мне кажется, в данном случае вообще выделение ресурсов нужно только один раз, а не на каждом акте общения с плагином. Лог всё равно кому-то нужно создавать... может быть, я не совсем понял идею.
            Ответить
    • как часто приходят логи от плагина, что new/delete тут вообще оправдано?
      Ответить
      • а еще, что такое params?
        Ответить
        • да понятно, что недешевый ассоциативный массив
          Ответить
          • Ассоциативный массив? В моём С++? Ох уж этот STL.

            P.S. Пока искал, что на эту тему думает яндекс, обнаружил отличный кусок копипасты.

            К счастью, некоторые технологии, реализованные в PHP можно перенести и в другие языки программирования: например, в C++.
            
            Одна из таких технологий – ассоциативные массивы.
            
            В ассоциативном массиве вместо числовых индексов используются ключи любых типов. Данные в ассоциативном массиве так же могут быть разнотипными. К примеру:
            
            ass_arr array;

            Нуф сказано.
            Ответить
            • Не STL код взят из приложения на Qt
              Ответить
            • > ass_arr
              Пиратский тип.
              Бутылка рома упала и укатилась вниз по палубе.
              - ASS! ARRRGHH!
              Ответить
            • а в чем собсно проблема с ассоциативными массивами в с++?
              с некоторыми хитростями даже в оном можно сделать аналог
              my_arr["somestring"] = 400;
              my_arr[200] = "so what?";
              Ответить
              • Не припомню случая, когда мне бы действительно пригодился массив с именами, вместо кошерных смещений.
                Конечно, поскольку я на плюсплюсах писал только в дебилдере, то и не пользовался няшными шаблонами, контейнерами и прочими вещами, хватало радостей и без них. И это снизило естественным образом мой кругозор, так что я не всегда догоняю, пошто это надо.
                Ответить
                • уу, я то уж думал что все претензии к с++ в том, что в std::map "просто так" тип ключа должен быть конкретным и известным на момент создания контейнера, в то время, как какие-то несомненно более крутые языки позволяют сделать нечто вроде a['b'] = 100; a["str"] = 'a'; a[200] = "str2"; сразу, без лишнего геморроя
                  Ответить
    • Что самое забавное логи валятся постоянно, практически каждое действие в программе логируется
      Что бы усилить эффект приведу код класса loger

      loger::loger()
      {
      }
      
      void loger::write(QString msg,QString logtype,QString login,QString modulename)
      {
          QSqlQuery query;
          QString time=QString().sprintf("%02d:%02d",QTime::currentTime().hour(),QTime::currentTime().minute());
          QString date=QString().sprintf("%04d/%02d/%02d",QDate::currentDate().year(),
                                                          QDate::currentDate().month(),
                                                          QDate::currentDate().day());
          query.exec("INSERT INTO log VALUES(NULL,\""+date+" "+time+"\",\""+login+"\",\""+modulename+"\",\""+logtype+"\",\""+msg+"\")");
          qDebug() << date << " " << time << " "  << modulename << " " << logtype << " " <<  msg;
      }


      по сути это статическая функция
      Ответить
      • просто ООП-обезьны считают, что если поставить в программе слово class, то она станет мягкой и шелковистой и сегфолты внезапно исчезнут
        Ответить
        • ООП-обезьян больше, чем нормальных погроммистов. Впрочем, к функциональным петушкам это тоже относится.
          Ответить
        • Жестко но справиедливо
          Ответить
    • loger, ага
      Ответить
    • Хм весьма забавно, выделил памать под обьект чтобы вызвать отдуды функцию которой этот обьект впринципе и не нужен, ООП дрочер какой - то.
      Ответить
    • правельно, путайте сотрудников говыряющихся в вашем, ну вы поняли...
      Ответить

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