Parece que es posible que necesite un manual sobre el concepto de "variable" en C++.
En C++ la duración de cada variable está ligada a su alcance abarcador. El ejemplo más sencillo de esto es las variables locales de una función:
void foo() // foo scope begins
{
UnloadingShip anUnloadingShip; // constructed with default constructor
// do stuff without fear!
anUnloadingShip.Unload();
} // // foo scope ends, anything associated with it guaranteed to go away
En el código anterior "anUnloadingShip" está predeterminado construido cuando se introduce la función foo (es decir, se introduce su alcance). No se requiere "nuevo". Cuando el ámbito abarcante se va (en este caso, cuando foo sale), el destructor definido por el usuario se llama automáticamente para limpiar el UnloadingShip. La memoria asociada se limpia automáticamente.
Cuando el alcance que abarca es una clase de C++ (es decir, una variable miembro):
class UnloadingBay
{
int foo;
UnloadingShip unloadingShip;
};
el tiempo de vida está ligada a las instancias de la clase, así que cuando nuestra función crea un "UnloadingBay"
void bar2()
{
UnloadingBay aBay; /*no new required, default constructor called,
which calls UnloadingShip's constructor for
it's member unloadingShip*/
// do stuff!
} /*destructor fires, which in turn trigger's member's destructors*/
los miembros de aBay se construyen y viven mientras "aBay" viva.
Todo esto se resuelve en tiempo de compilación. No hay recuento de referencias en tiempo de ejecución que impida la destrucción.No se hacen consideraciones para cualquier otra cosa que pueda refer to o point to esa variable. El compilador analiza las funciones que escribimos para determinar el alcance y, por lo tanto, la duración de las variables. El compilador ve dónde termina el alcance de una variable y todo lo que se necesita para limpiar esa variable se insertará en tiempo de compilación.
"nuevo", "NULO", (no olvide "eliminar") en C++ entren en juego con los punteros. Los punteros son un tipo de variable que contiene una dirección de memoria de algún objeto. Los programadores usan el valor "NULL" para indicar que un puntero no contiene una dirección (es decir, no apunta a nada). Si no está usando punteros, no necesita pensar en NULL.
Hasta que domine cómo entran y salen las variables en C++, evite los punteros. Es otro tema completamente.
¡Buena suerte!
¿IsloadingShip es una función de clase? ¿Puedes publicar tu declaración de clase? –
No unloadingShip es un atributo de unLoadingBay, que es la clase donde isEmpty es miembro –
pharma_joe: Como consejo general: ¿Todo lo que aprendió en Java? Olvídalo. No te ayudará en C++. – greyfade