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

    +51.9

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    CSocket*   CServer::GetSocket  (const int& fd) { // Find socket by FD
      if (m_mapSocket[fd]) return m_mapSocket[fd];
      else return NULL;
    }
    // another one piece of crap...
    void CServer::CloseSocket(const int& fd) { // Close Socket.
      delete m_mapSocket[fd];
      if (m_mapSocket[fd]) m_mapSocket.erase(fd);
    
      FD_CLR(fd,&FFd_set);
      if (fd == FMax_fd) FMax_fd--;
    }

    Запостил: zaufi, 28 Августа 2009

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

    • забыл упомянуть что m_mapSocket это std::map<int, CSocket*>
      Ответить
    • поржал. отличный говнокод :)
      Ответить
    • Автор явно не в ладах с mapами.
      Ответить
      • Не. С мапами у него всё хорошо. Он не в ладах с массивами.
        Ответить
        • я бы не сказал, что тут все хорошо с мапами.
          куча поисков,
          вторая строчка CServer::GetSocket() - вообще ни о чем, ибо никогда не выполнится,
          первая CServer::CloseSocket() - явно просится access violation,
          вторая CServer::CloseSocket() тоже ни о чем, ибо выполнится всегда.

          хотя, вероятно у автора и с массивами тоже беда, т.к. они были бы очевидной оптимизацией.
          а еще, имхо, передавать int ссылкой - форменное извращение.
          Ответить
          • хотя.. мапа же наверное имеет защиту от дурака и все же инициализирует указатель...
            тогда вторая строчка CServer::GetSocket() все равно ни о чем, ибо просто избыточна,
            access violation в CServer::CloseSocket() тоже не будет, а будет просто memleak при нулевом указателе :)
            Ответить
          • >хотя, вероятно у автора и с массивами тоже беда, т.к. они были бы очевидной оптимизацией.
            Хотя может это был способ генерировать исключения в случае отсутствия элемента в массиве...
            Ответить

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