Modificando objetos sin nombre mediante la semántica de valor-r.
Tengo un método que modifica objetos pasados por referencia:
class MyClass;
MyClass& modify (MyClass& x) { …; return x; }
¿Cuál es la forma correcta de extender modify a objetos sin nombre evitando copias adicionales, de modo que el siguiente código sea válido?
MyClass createMyClass () { … }
MyClass x = modify(createMyClass());
// en lugar de:
MyClass x = createMyClass();
modify(x);
PD: MyClass implementa un movimiento eficiente.
davy.ai
Puedes extender la función
modify
para objetos sin nombre haciéndola una función de plantilla que tome unT&&
(referencia de valor temporal) como argumento:De esta manera,
modify
puede aceptar tanto referencias de valor temporal como de lvalue, y el siguiente código será válido: