Sembra che potrebbe essere necessario un primer sul concetto di una "variabile" in C++.
In C++, la durata di ogni variabile è legata al suo ambito di copertura. L'esempio più semplice di questo è variabili locali di una funzione:
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
Nel codice precedente "anUnloadingShip" viene predefinita costruito quando viene inserita la funzione foo (cioè la sua portata è inserito). Nessun "nuovo" richiesto. Quando l'ambito comprensivo scompare (in questo caso quando foo termina), il distruttore definito dall'utente viene automaticamente chiamato a ripulire UnloadingShip. La memoria associata viene automaticamente ripulita.
Quando l'ambito che comprende è una classe C++ (vale a dire una variabile membro):
class UnloadingBay
{
int foo;
UnloadingShip unloadingShip;
};
la durata è legata alle istanze della classe, in modo che quando la nostra funzione 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*/
i membri di aBay sono costruiti e vivono finché vive "aBay".
Questo è tutto calcolato in tempo di compilazione. Non esiste un conteggio dei riferimenti di runtime che prevenga la distruzione.Nessuna considerazione viene presa per qualcos'altro che potrebbe essere refer to o point to tale variabile. Il compilatore analizza le funzioni che abbiamo scritto per determinare l'ambito e quindi la durata delle variabili. Il compilatore vede dove finisce l'ambito di una variabile e qualsiasi cosa necessaria per ripulire quella variabile verrà inserita in fase di compilazione.
"nuovo", "NULL", (non dimenticare "elimina") in C++ entra in gioco con i puntatori. I puntatori sono un tipo di variabile che contiene un indirizzo di memoria di qualche oggetto. I programmatori usano il valore "NULL" per indicare che un puntatore non ha un indirizzo (cioè non punta a nulla). Se non stai usando i puntatori, non devi pensare a NULL.
Fino a quando non hai imparato come le variabili in C++ vanno dentro e fuori dall'ambito, evitare i puntatori. È un altro argomento interamente.
Buona fortuna!
È unloadingShip una funzione di classe? Puoi pubblicare la tua dichiarazione di classe? –
No unloadingShip è un attributo di unLoadingBay, che è la classe in cui isEmpty è membro –
pharma_joe: Come suggerimento generale: tutto ciò che hai imparato in Java? Dimenticalo. Non ti aiuterà in C++. – greyfade