No entiendo la semantica de movimientos (C++11)

Iniciado por SARGE553413, 13 Enero 2014, 15:24 PM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

Hola a todos.

Estoy leyendo un pequeño documento acerca de las nuevas caracteristicas de C++11
link: http://www.eiic.ulpgc.es/documentoscongresos/Francisco%20Palomo-Inmaculada%20Medina.pdf

El caso es que, por lo que veo, la característica mas potente y compleja es la semántica de movimientos. Si lo he entendido bien, esto incide directamente en el rendimiento del código (haciéndolo mucho mas eficiente). (¿es mucho más, o poco más?)

El caso es que lo leo y releo y no consigo entenderlo.
Explico lo que "creo entender":
1 - Sé lo que es un r-value, entiendo que siempre se almacenan en la stack.
2 - Creo entender que la idea del move semantics es "mover" un r-value de la stack al heap.
¿¿¿ Esto se consigue asignando la direccion de memoria de nuestor r-value (que esta en el stack) a un puntero que está apuntado a una dirección del heap???

Cito la explicación que dan:
Estas referencias, distintas de las habituales, se construyen con &&, en lugar de &.
Las referencias && pueden ligarse a un temporal y permiten su modificación.
...
Por lo tanto, es posible incluir en las clases constructores y operadores de asignación que
reciban referencias a valores «r». En el caso de un contenedor que posea un puntero
a memoria dinámica, su función sería encargarse de «mover» la memoria reservada en
el temporal al objeto destino que está siendo construido o asignado.
(WTF?!?!?)

¿Puede alguien explicarme esto por favor? no lo consigo entender.

Muchas gracias.

PD. ¿cuál es el motivo por el cual el compilador no puede conseguir el move semantics por si solo?