| 125 | // push_back() overload for lvalue references |
| 126 | template <typename T> |
| 127 | void Array<T>::push_back(T element) // Pass by value (copy of lvalue, or moved rvalue!) |
| 128 | { |
| 129 | Array<T> newArray{m_size + 1}; // Allocate a larger Array<> |
| 130 | for (size_t i{}; i < m_size; ++i) // Move all existing elements... |
| 131 | newArray[i] = std::move(m_elements[i]); |
| 132 | |
| 133 | newArray[m_size] = std::move(element); // Move the new one (could itself be a copy already)... |
| 134 | |
| 135 | swap(newArray); // ... and swap! |
| 136 | } |
| 137 | |
| 138 | #endif |