Tengo una pregunta interesante sobre los punteros de C++.¿Cómo reasignar el puntero `this` dentro de la función miembro miembro?
Probablemente piense que tengo que cambiar mi diseño, y evite haciendo lo que estoy haciendo, y probablemente tenga razón. Pero supongamos que tengo una buena razón para hacerlo a mi manera.
Así que esta es la situación. Tengo un C++ TestClass clase, y tengo un puntero A de este tipo:
TestClass* A = new TestClass();
Entre otras cosas TestClass tiene esta función:
void TestClass::Foo(){
TestClass* B = new TestClass();
...
}
Esta función crea el objeto B del mismo tipo y puebla con algunos datos.
Al final de esta función, quiero puntero del A al punto B. al objeto en cualquier lugar fuera de esta función se vería como A=B
; dentro de esta función podría verse como this = B
Pero como usted sabe, no puede reasignar este puntero.
soluciones posibles:
copiar la memoria:
memcpy(this, B, sizeof(TestClass));
Este método funciona correctamente. La función copia cada bit del objeto B en el objeto A.
Problema: si TestClass es un objeto grande (y lo es), crea una sobrecarga significativa en el rendimiento para múltiples llamadas Foo.devolver un puntero B de la función y hacer algo como esto
Temp = A; A=A->Foo(); freeMemory(Temp);
Pero este código es estúpida, y hace que la función Foo muy difícil de usar.
Entonces la pregunta es, cómo puedo hacer this = B
desde el interior de una función miembro, sin copiar objetos enteros?
No creo que haya una buena razón para hacer esto. – GManNickG
Todo esto huele mal. ¿Es Foo() realmente un método de clonación? ¿Por qué Foo() no se llama Clone() y devuelve un puntero al objeto recién creado? –
¿Por qué necesita asignar un nuevo objeto? ¿Por qué no puedes simplemente sobrescribir/restablecer todos los miembros de A? –