Recientemente, manyquestionspop up sobre cómo proporcionar su propia función swap
. Con C++ 11, std::swap
usará std::move
y mover semántica para intercambiar los valores dados lo más rápido posible. Esto, por supuesto, solo funciona si proporciona un constructor de movimiento y un operador de asignación de movimiento (o uno que use el valor de paso por valor).Semántica de movimiento == función de intercambio personalizada obsoleta?
Ahora, con eso dado, ¿es realmente necesario escribir sus propias funciones swap
en C++ 11? Solo pude pensar en tipos no móviles, pero una vez más, los swap
personalizados generalmente funcionan a través de algún tipo de "intercambio de puntero" (también conocido como movimiento). Tal vez con ciertas variables de referencia? Hm ...
Gracias por la actualización, Howard. Supongo que 'A (const A &) noexcept;' es un error tipográfico, o tal vez tragar símbolos? Es decir. que usted quiso decir 'A (A &&) noexcept;' (y lo mismo para el operador de asignación)? Cheers, –
@Alf: No; él está dando un ejemplo donde 'std :: swap' será' noexcept (true) 'incluso sin una construcción/asignación de movimiento real. –
@Dennis: Creo que necesito más explicación, porque para mí eso se parece a un constructor de copia ordinario (no para mover) y a un operador de asignación de copias ordinario, y según tengo entendido, no tienen nada que ver con 'is_nothrow_move_constructible' o' is_nothrow_move_assignable'? –