geeksforgeeks front array c++ arrays c++11 move-semantics

front - vector c++ geeksforgeeks



Es std:: array movible? (1)

std::array solo se puede mover si sus objetos contenidos son movibles.

std::array es bastante diferente de los otros contenedores porque el objeto contenedor contiene el almacenamiento, no solo los punteros en el montón. Mover un std::vector solo copia algunos punteros, y los objetos contenidos no son más acertados.

Sí, std::array usa el constructor de movimiento predeterminado y el operador de asignación. Como una clase agregada, no está permitido definir ningún constructor.

Es std :: array movible?

En las diapositivas de presentación de Bjarne Native 2012 (diapositiva 41) enumera std::array como uno de los únicos contenedores que no se puede mover.

Un vistazo rápido al código fuente de las bibliotecas gcc 4.8 parece confirmar que std::array no es movible:

std :: vector:

/* @brief %Vector move constructor. ... */ vector(vector&& __x) noexcept : _Base(std::move(__x)) { }

mientras que en std :: array, el único método que recibe un parámetro de referencia rvalue es el acceso aleatorio al elemento, que evita una devolución por copia:

get(array<_Tp, _Nm>&& __arr) noexcept { /*...*/ return std::move(get<_Int>(__arr)); }

¿Se crearon move-constructor y move-assignment para std::array defecto, o std::array mover? Si no se puede mover, ¿por qué std::array no se puede mover mientras std::vector puede?