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

0

  1. 1
delete new T;

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

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

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

  • Мать Жана Батиста Гренуя видимо чуяла неладное. По коду - а смысл?
    Ответить
    • > а смысл
      Ради побочного эффекта конструктора, возможно.
      Ответить
        • Смотрю я на эти ваши new и думаю, что пора бы завести оператор old. Последний должен возвращать ссылку на уже дешевый (по ресурсам) старый объект в неизвестном состоянии. Дадим старым вещам новую жизнь! Спасём кучу от смерти в мусоре!
          Ответить
          • > Последний должен возвращать ссылку на уже дешевый (по ресурсам) старый объект в неизвестном состоянии.
            Ну всякие пулы так и работают...
            Ответить
          • В жаве до жопы, т.к. там копирующий сборщик мусора.
            Ответить
            • Но он будет чаще запускаться. А вообще - да, пулы мелких объектов в жабе могут даже ухудшить производительность.
              Ответить
        • а в конструкторе Main какой-нибудь вызов mAin ... и дальше перебор кейсов.
          Ответить
    • > а смысл?
      смысла особого нет, кроме явного "передергивания" объекта, влекущего то, о чем сказал bormand.
      недавно просто проплывала ссылка на код тараса (http://govnokod.ru/14093),
      и я подумал, ну нельзя же так срать в куче, надо и убирать иногда. И вот результат.
      Ответить
  • Я не устоял и написал свой калькулятор в этой парадигме.
    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 осталось.
          То ж библиотечный код. Там можно.
          Ответить
  • - Ладно, можешь сделать салат из свежих овощей - просто порезать их и сбрызнуть оливковым маслом?
    Ответить

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

Из-за тебя ушел bormand, guest!

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


    8