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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
T& T::operator =(const T& that)
{
    delete[] Name;
    Name = that.Name ? strcpy(new char[strlen(that.Name) + 1], that.Name) : 0;
    return *this;
}

плюсы без плюсов

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

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

  • стыдно признаться, но я тоже иногда что-то подобное делаю 🙁
    Ответить
    • весьма унылая ситуация, полная иронии.

      несколько раз в С++ приходилось `std::string` в `char*` переводить потому что динамическая память ставила все на колени, и ее с std::string никак не избежать.

      но и несколько раз С проекты на С++ перетаскивал, только для того что бы с помощью std::string обработку строк хотя бы кое как в человеческий вид привести.
      Ответить
      • забыл уточнить, что подобный код я пишу чисто для себя, его никто не увидит, и в обычных условиях моего домашнего ноутбука он прекрасно работает. На работе code reviewers конечно же такое не пропустят (и правильно сделают)
        Ответить
        • И зачем дома гадить, хоть и в код?
          По ГК могу добавить, что имеем проёб строки, если присваиваем самому себе. Ну, и будь член Name нормальной std:: строкой писать оператор присваивания, а равно как и копиконструктор с деструктором, надобности бы не возникло.
          Меньше кода - меньше багов.
          Ответить
          • Если честно, то просто лень заморачиваться, в чистом виде со строками мне редко приходится работать, они скорее часть какой-нибудь структуры, и размер строки заранее задан и известен
            Ответить
          • > Меньше кода - меньше багов.

            я когда под пивом дома пишу, ведущий принцип это "меньше думаешь - меньше думаешь."
            Ответить
        • неужели в свежих версиях крестов что-то сделали что бы в stl с кастом аллокаторами было проще работать? в прошлом были кучи мелких неприятных граблей, и кучи мудачества около, потому что даже `a = b;` больше не компилится (где a &b это тот же самый stl класс, но с разными аллокаторами).
          Ответить
          • Классы, построенные по одному шаблону, но с разными параметрами - это разные классы. Если нет соответствующего шаблонного же оператора присваивания, то ничего не получится.
            Ответить
            • > то ничего не получится.

              в этом как бы и был вопрос.

              судя по списку конструкторов - http://www.cplusplus.com/reference/string/basic_string/basic_string/ - ничего не изменилось, и присвоение все еще надо делать с помощью `a.assign( b.begin(), b.end() );` или подобного.

              я на одном проекте пытался с альтернативным алокатором работать, но вот из-за таких граблей это было просто непрактично.
              Ответить
                • > basic_string_ref (http://goo.gl/JhUjq9)
                  > > What you need is an intermediate type that is implicitly constructable from both std::string and your allocator string.

                  блин, но это же для каждого stl'ного класса надо делать.

                  читая дальше:

                  > http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3334.html#classstd_1_1basic__string__re f
                  > > It is expected that user-defined string-like types will define an implicit conversion to string_ref (or another appropriate instance of basic_string_ref) to interoperate with functions that need to read strings.

                  это совсем для других целей народ делает.

                  вообщем проще пока не заморачиватся.
                  Ответить

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

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

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


    8