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

    +10

    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
    template <typename T, size_t rows, size_t cols>
    class Matrix {
    public:
        Matrix() :
            m_matrix(new T[rows * cols])
        {
            // Make identity matrix, if possible
            if ( rows == cols ) {
                for ( size_t i = 0; i < rows; i++ )
                    m_matrix[i * cols + i] = 1; // FIXME: this is hack
            }
    
        }
    
        // ...
    
        Matrix<T, rows, cols>& operator =(Matrix<T, rows, cols> &&other) {
            if ( this != &other ) {
                delete [] m_matrix;
                m_matrix = other.m_matrix;
    
                other.m_matrix = new T[cols * rows];
                other = static_cast<const Matrix&>(Matrix());
            }
    
            return *this;
        }
    
        // ...
    };

    Издержки move construtor :)

    Прошу внимания к строчкам 19-23

    Запостил: Elvenfighter, 30 Ноября 2012

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

    • Ах да, забыл. Если вдруг не понятно:
      private:
          T *m_matrix;
      Ответить
      • Может правильнее было бы на месте строк 22-23 написать:
        other.m_matrix = nullptr;

        ?
        Ответить
    • А хренли делать, если размеры старой и новой матриц разные.
      Ответить
      • Не скомпилируется :)
        Ответить
        • А блин, размеры это параметры шаблона.
          Тогда нах вообще кучу дёргать...
          Ответить

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