// Attention, ce programme n'est pas nécessairement valide : il utilise la bibliothèque
// standard `iostream' alors qu'il n'est pas sûr que cette dernière soit initialisée.

#include <iostream> // `cin', `cout' et `cerr'.
#include <iomanip>  // setw(...).

using namespace std ;

class Objet {
	string nom ;
public :
	// Constructeur.
	Objet(const string & arg) : nom(arg) {
		cout << "Appel du constructeur -- `" << nom << '\'' << endl ; }
	// Destructeur.
	~Objet() {
		cout << "Appel du destructeur -- `" << nom << '\'' << endl ; }
} ;

Objet instance_globale("Instance globale") ; // Instruction potentiellement invalide.

int
main()
{
	cout << "À l'entrée de `main()'" << endl ;

	Objet instance_locale("Instance locale") ;
	Objet & instance_sur_le_tas = * new Objet("Instance sur le tas") ;

	delete & instance_sur_le_tas ;

	cout << "À la sortie de `main()'" << endl ;
	return 0 ; // Retour au système d'exploitation avec le code `0'.
}
