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

    +22

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    template<class T>
    class Box
    {
    private:
    	explicit Box(const Box&);
    	Box& operator = (const Box&);
    public:
    	explicit Box()
    		: m_value(0)
    	{}
    	explicit Box(T* value)
    		: m_value(value)
    	{}
    	~Box()
    	{
    		std::auto_ptr <T> toDelete(m_value);
    	}
    	T* Release()
    	{
    		T* const result(m_value);
    		m_value = 0;
    		return result;
    	}
    	void Reset(T* value)
    	{
    		std::auto_ptr <T> toDelete(m_value);
    		m_value = value;
    	}
    private:
    	T* m_value;
    };

    Запостил: Setry, 19 Ноября 2012

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

    • Встречено в коммерческом проекте. Может я чего не понимаю?
      Ответить
    • А чем Box с закрытыми конструкторами копирования и оператором присваивания лучше того же std::auto_ptr? Судя по всему, роль у них примерно одинаковая: единолично владеть указателем на объект. Так читабельнее и понятнее автору? Тем, что, в отличие от auto_ptr, не затрёт указатель при копировании?
      Ответить
      • Вразумительного ответа от автора я не смог добиться. Меня больше всего убивает оборачивание в std::auto_ptr в деструкторе и reset.
        Ответить
        • > оборачивание в std::auto_ptr в деструкторе и reset
          Ведь в книжке написано, что вызывать деструктор явно - очень опасно, пусть грязную работу делает auto_ptr
          Ответить
          • Просто не барское это дело. Пусть грязную работу делает холоп^W auto_ptr
            Ответить
    • Меня больше убивает сама возможность вот так брать все эти умные указатели , и инициализировать их указателем, жившим и раньше. Не тем, которые получены прямо на месте по оператору new, а тем, которые можно получить даже так:
      std::unique_ptr<int>a ( new int);
      std::unique_ptr<int>b ( &(*a) );

      В связи с тем, что новый стандарт позволяет писать
      std::unique_ptr<Foo>a(x,y,z) (будет вызван Foo(x,y,z)), я предлагаю выпилить smart_ptr(T*) нахуй.
      Ответить
      • вы неправильно держите свой телефон
        Ответить
        • Складывается такое впечатление, что он не только телефон свой неправильно держит ....
          Ответить
        • Поясните мысль.
          Ответить
          • "you're holding it wrong"
            Результатов: примерно 277 000 000 (0,30 сек.)
            Ответить
            • Ой ты ж блядь крестоблядь, оказывается, это крестосмартные пэтээры надо дуить не вронгно, а именно правильным образом, и только тогда они работают как надо!
              Ответить
              • >крестосмартные пэтээры надо дуить не вронгно
                Прочёл этот мультиязыковой пиздец с третьего раза.
                Ответить
          • яблоюмор...
            Ответить

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