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

    +64

    1. 1
    delete new T;

    убийство новорожденного

    Запостил: absolut, 19 Сентября 2014

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

    • Мать Жана Батиста Гренуя видимо чуяла неладное. По коду - а смысл?
      Ответить
      • > а смысл
        Ради побочного эффекта конструктора, возможно.
        Ответить
        • Я вот прям сейчас смотрю на жабий код
          public static void main(String[] args) {
              new Main();
          }
          Ответить
          • Смотрю я на эти ваши new и думаю, что пора бы завести оператор old. Последний должен возвращать ссылку на уже дешевый (по ресурсам) старый объект в неизвестном состоянии. Дадим старым вещам новую жизнь! Спасём кучу от смерти в мусоре!
            Ответить
            • old уже есть, это shared_ptr по сути.
              Ответить
            • > Последний должен возвращать ссылку на уже дешевый (по ресурсам) старый объект в неизвестном состоянии.
              Ну всякие пулы так и работают...
              Ответить
            • В жаве до жопы, т.к. там копирующий сборщик мусора.
              Ответить
              • Но он будет чаще запускаться. А вообще - да, пулы мелких объектов в жабе могут даже ухудшить производительность.
                Ответить
          • а в конструкторе Main какой-нибудь вызов mAin ... и дальше перебор кейсов.
            Ответить
      • > а смысл?
        смысла особого нет, кроме явного "передергивания" объекта, влекущего то, о чем сказал bormand.
        недавно просто проплывала ссылка на код тараса (http://govnokod.ru/14093),
        и я подумал, ну нельзя же так срать в куче, надо и убирать иногда. И вот результат.
        Ответить
    • {T _;}
      Ответить
      • стековая версия похожа на франкенштейна
        Ответить
        • Одноглазый объект плачет в тюрьме из скобок.
          Ответить
          • А вроде в тюрьме вилок не дают?
            Ответить
            • http://static.diary.ru/userdir/4/1/3/0/413061/22806947.jpg
              Ответить
              • Ремейк все видели?
                Ответить
                • >Ремейк
                  Говноедов тут нет, я полагаю.
                  Ответить
                • Что за ремейк?
                  Ответить
                  • Гайдаи и Даниэлии повывелись.Вместо них теперь Баскова.
                    Но унылые халтурщики решили снимать сиквелы к старым советским комедиям, пытаясь срубить немного бабла на их известности.
                    Ответить
                • >Ремейк все видели?
                  Он уже вышел? Про кавказскую пленницу что-то слышал краем уха.
                  Ответить
                  • вышел. ГГ играет сам Безруков. Это пиздец
                    Ответить
    • Я не устоял и написал свой калькулятор в этой парадигме.
      http://ideone.com/11jE3T

      Упрощёння версия:
      #include <iostream>
      #include <stack>
      
      #define OPERATIONS(X) X(Add, +) X(Sub, -) X(Mul, *) X(Div, /)
      
      std::stack<double> stack;
      
      struct Top  { Top  (double& x) { x = stack.top();   } };
      struct Push { Push (double  x) {     stack.push(x); } };
      
      struct Pop {
      	Pop(double& x) {
      		delete new Top(x);
      		stack.pop();
      	}
      };
      
      struct Number { Number (double v) { delete new Push(v); } };
      
      #define OPERATION_CLASS(Name, X) \
      struct Name { \
      	Name () { \
      		double x, y; \
      		delete new Pop(y); delete new Pop(x); \
      		delete new Push(x X y); \
      	} \
      };
      
      OPERATIONS(OPERATION_CLASS)
      
      struct Print {
      	Print () {
      		double x; 
      		delete new Top(x);
      		std::cout << x << std::endl;
      	}
      };
      
      int main() {
      	delete new Number(3); delete new Number(2);
      	delete new Div; delete new Print;
      	
      	return 0;
      }
      Ответить
      • Знатно упоролся. Я б добавил для "читабельности":
        #define make delete new
        http://ideone.com/CCYnk1

        Кстати а компилятор, он тварь крестящая, иль право имеет на выпил таких вот сайд-эффектов?
        Ответить
        • Там ещё 11 штук delete new осталось.
          А вообще, для "читабельности" надо не make, а exec.
          Ответить
          • Исполнить Номер 2 vs Сделать Номер 2
            Сделать Номер 3
            Сделать Деление
            >ещё 11 штук delete new осталось.
            То ж библиотечный код. Там можно.
            Ответить
            • Тогда ладно.

              Кстати, замена для for(i=0; i<N; ++i)...: http://ideone.com/yf1ars
              Ответить
    • - Ладно, можешь сделать салат из свежих овощей - просто порезать их и сбрызнуть оливковым маслом?
      Ответить

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