Nuevo operador en parámetro de función.

Tengo una función y esa función toma en un puntero de clase. El problema es que yo llamo así al puntero de clase.

Function (new ChildClass); 

la función se ve algo como esto

 void Function (BaseClass *instance) { childClassInstance = instance; } 

La razón por la que lo llamo con la nueva palabra clave es porque la necesito fuera de mi función. Lo que quería saber era. Cuando esté listo para borrar la instancia. ¿Cómo lo haría? Ya que está en el parámetro de función, ¿cómo lo llamaría para borrarlo? o ¿cómo podría acceder a su ubicación en la memoria para poder eliminarlo?

Si esto no fuera posible, ¿cuál sería una mejor solución?

Es posible, pero también hay una mejor solución. Utilice RAII. O pase el parámetro por referencia:

 void Function (BaseClass& instance); //... ChildClass c; Function(c); 

Incluso si mantiene un puntero, no tiene que crear una nueva instancia con una new para pasar un puntero como parámetro:

 ChildClass c; Function(&c); 

Puede declarar una variable para almacenar su puntero antes de llamar a su función. Luego puedes borrarlo después de que regrese tu función.

 ChildClass *c = new ChildClass; Function(c); delete c; 

Pero, si este es tu idioma, entonces solo usa una instancia automática. Luego, cuando queda fuera del scope, su objeto se elimina automáticamente.

 ChildClass c; Function(&c); 

Si crea un objeto con nuevo, debe guardar ese puntero en algún lugar, para poder eliminarlo más tarde. No hay otra opción. Pero esta es una de las cosas que hace que los punteros sean complicados, por lo que debe evitarlos si es posible. Podría evitar lo nuevo como otros lo han dicho, o podría usar un puntero inteligente que eliminará automáticamente el objeto por usted.

    Intereting Posts