Ciao a tutti,
ho copiato il seguente programma da un testo, ma non mi sono molto chiare delle cose:
Come mai viene richiamato solo 1 volta il costruttore e 3 volte il distruttore ?

Come mai l'istruziome throw lancia solo il nome della classe (di solito non si lavora con gli oggetti ? )
Se tale classe lanciata da throw viene distrutta subito dopo il lancio dell' eccezione, ( vedere nell' output l' avvio del distruttore) , come fa il blocco catch a prelevarne i valori inizializzati ?

Vi allego il programmino
Grazie a tutti.
Ciao
codice:
#include <iostream>
using namespace std;

class MyException
{
public:
	char str_what[80];
	int what;
	MyException() 
	{
		cout <<" costruttore senza parametri\n";
		*str_what  =0;
		what =0;
	}

	MyException( char *s, int e ) 
	{
	        cout <<" costruttore con parametri\n";
		strcpy(str_what, s);
		what = e;
	}

	~MyException() 
	{
		cout <<" distruttore\n";
	}		
};

void  main(void)
{
	int i;
	try 
	{
		cout << "mettere un numero positivo \n";
		cin >> i;
		if (i <0)
			throw MyException (" il nomero e' negativo: ", i );
	}
	catch(MyException e)
	{
		cout << e.str_what;
		cout << e.what;
		cout <<"\n";
	}

	cout <<" \nFINE\n";

}


ora avviatelo, e mettete un numero negativo.
Vi dovrebbe apparire il seguente output:
Codice PHP:
mettere un npositivo
-4               /* numero immesso dall'utente */
costruttore con parametri
distruttore     
/*cosa ho distrutto? Non ho creato alcun oggetto... */
il numero e' negativo: -5     /* ma se ho distrutto il presunto oggetto, come mai ritrovo i valori inizializzati precedentemente? */ 
distruttore
distruttore

FINE