En C++, this representa una referencia al objeto actual. Aunque muchas veces lo usamos para acceder a miembros, también es válido asignarle un nuevo valor. Esto resulta especialmente útil en structs que funcionan como tipos de valor, cuando queremos resetear o actualizar todos los campos de golpe.
Veamos un ejemplo:
#include <iostream>
#include <string>
struct Punto {
int x, y;
void reiniciar() {
*this = Punto{0, 0}; // Reasignación completa del objeto
}
void mover(int dx, int dy) {
*this = Punto{x + dx, y + dy}; // Reemplazo con una nueva instancia
}
};
int main() {
Punto p{5, 10};
p.mover(2, -3);
std::cout << "x: " << p.x << ", y: " << p.y << std::endl;
p.reiniciar();
std::cout << "x: " << p.x << ", y: " << p.y << std::endl;
}
¿Por qué usarlo?
- Código más claro: Evita múltiples líneas asignando miembro por miembro.
- Inmutable en espíritu: Te permite trabajar con una nueva instancia sin modificar campos individuales.
- Ideal en structs livianos: Como los de tipo valor.
No todo lo que brilla es oro, para utilizar esto tenemos que tener en cuenta:
- Solo es válido en contextos donde la reasignación no genera efectos colaterales indeseados.
- No debe usarse en clases con invariantes complejas, donde cambiar el estado parcial pueda llevar a errores sutiles.