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?