Translate

domingo, 22 de junio de 2025

Asignar a *this en C++: una técnica útil en structs


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.