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

    +171

    1. 1
    const_cast<TRefalAbstract*>(this)=new TRefal();

    Запостил: Говногость, 18 Июня 2011

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

    • Правильно так:
      new((void*)this) TRefal();
      Ответить
      • Да, стрелять себе в ногу нужно уметь.
        Ответить
        • Согласитесь, возможность то приятная. :D
          Ответить
          • Но желания не всегда совпадают с возможностями. :-/
            Ответить
            • В данном случае, скорее рекомендации не совпадают с возможностями.

              зы: Я знаю, что так делать нельзя., но этот код всеж лучше основного говнокода. :)
              Ответить
              • Конечно же лучше. Хороший, качественный говнокод, способный принести много отладки, баттхерта и холивара. А оригинальный наверняка даже не скомпилируется.
                Ответить
                • По стандарту врятли, хотя на каких-то компиляторах точно скомпилится.
                  Ответить
                  • зы: Студия выдаёт сообщение об ошибках и в скобочках указано: (анахронизм).
                    Ответить
    • И в каком, интересно узнать, контексте это работает?
      Ответить
      • >the keyword this is a non-lvalue expression

        Это вообще не должно работать.
        Ответить
    • *(reinterpret_cast<TRefal*>(this)) = TRefal();
      Ответить
      • *(reinterpret_cast<TRefal*>(this)) = TRefal();
        Так разве можно? Думаю, нет. о_О
        Ответить
        • Можно, и даже каст не нужен.
          Ответить
          • Да ну, не может быть. о_О
            И что даёт этот код? На месте старого объекта создаётся новый? Вызывается старый деструктор?
            Ответить
            • Создаёт временный объект и использует его для оператора присвоения, не?
              То что к оригинальному говнокоду это уже не имеет поношения -- это уже другой вопрос.
              Ответить
              • *лицо, изображающее суровый батхёрт*
                Вот я ступил...
                Ответить
                • Осторожнее ступать то надо.
                  Но между нами говоря, я думаю, вы не туда сели...
                  Ответить
                  • -
                    Ответить
                    • Ёж, вы тоже колитесь?
                      Ответить
                      • Хотел написать что-то в духе
                        "Три девицы под окном
                        Оказались все говном"
                        Случайно отправил недописав, а потом вообще передумал. А редактировать только раз можно.
                        Ответить
                        • Ясно, значит просто грибы.

                          зы: редактировать второй раз можно, если обновите страницу.
                          Ответить
                      • > колитесь
                        Ответить
    • 'this' не является lvalue, поэтому не существует способа поменять 'this', как ни вертись. Код, разумется, компилироваться не будет. Поэтому почему его сюда запостили - не ясно.

      Подобную белиберду обычно пишут люди, навно полагающие, что 'this' является "констаным указателем". Соответственно они думают, что достаточно снять с 'this' эту константность, и можно его менять на здоровье. В данном случае даже снятие констаности сделано неправильно, но это уже детали. Код, пытающийся поменять 'this' компилироваться, как ни вертись, не будет.
      Ответить
    • показать все, что скрытоvanished
      Ответить

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