Ho il seguente codice:La relazione tra la dichiarazione di andata e distruttori
#include <iostream>
using namespace std;
class CForward;
void func(CForward* frw) { delete frw; }
class CForward
{
public:
~CForward() { cout << "Forward" << endl; }
};
int main()
{
func(new CForward);
cin.get();
}
ho eseguito il programma, ed è stampato nulla.
Perché?
in main, ho creato new CFoward
e in func
l'ho eliminato e l'ho chiamato distruttore.
Sembra che il distruttore non sia stato chiamato. Perché? E 'comunque collegato alla decelerazione diretta?
'g ++' in realtà ti dice cosa sta succedendo quando compili questo codice. – fuenfundachtzig
Almeno aumentare il livello di avviso sul compilatore. Questo dovrebbe sempre emettere una diagnostica "cancellazione del puntatore a tipo incompleto". –
GCC è piuttosto utile: 'avviso: possibile problema rilevato in invocazione dell'operatore di cancellazione: [abilitato per impostazione predefinita] 'frw' ha tipo incompleto [abilitato per impostazione predefinita] forward dichiarazione di 'classe CForward' [abilitato per impostazione predefinita] nota: né il il distruttore e l'operatore specifico della classe delete verranno chiamati, anche se vengono dichiarati quando la classe è definita ». – juanchopanza