Objet global : méthode propre?

Le
Gégé
Bonjour,

J'aimerais pouvoir utiliser un objet ( unique ) n'importe où dans
certaines classes de mon projet.
Typiquement imaginons que cette objet soit un fichier de log ( classe
L ).

J'aimerais pouvoir faire à tout moment un truc du style:
L::set( x ); // <-- écrit x dans un fichier commun à toutes
mes classes

Naturellement, je pensais à un objet instancié de façon globale avant
le main, mais est-ce très propre ?

Quelqu'un aurait-il une suggestion ? Merci.

G
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickaël Wolff
Le #18495261
Gégé a écrit :
Quelqu'un aurait-il une suggestion ? Merci.



On appelle ça un singleton. En voici un exemple naïf :

class L
{
static L * instance ;
L() { } ;

public:
static L * get()
{
if(!instance)
instance = new L ;

return instance ;
}

static void clear()
{
delete instance ;
}
} ;

L * L::instance = 0 ;

Son usage :

L * log = L::get() ;
/* on fait joujou sur log */
L::clear() ;

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position
Michel Decima
Le #18496031
Mickaël Wolff a écrit :
Gégé a écrit :
Quelqu'un aurait-il une suggestion ? Merci.



On appelle ça un singleton. En voici un exemple naïf :

class L
{
static L * instance ;
L() { } ;

public:
static L * get()
{
if(!instance)
instance = new L ;

return instance ;
}

static void clear()
{
delete instance ;
}
} ;

L * L::instance = 0 ;

Son usage :

L * log = L::get() ;
/* on fait joujou sur log */
L::clear() ;



Je ne sais pas si la fonction membre clear() est vraiment utile,
mais elle devrait au moins remettre a NULL le pointeur apres
le delete, sinon il y aura un soucis apres le prochain get().
Gégé
Le #18499131
ca me parfait nickel pour ce que je veux faire
merci bcp pour cette suggestion.
Mickaël Wolff
Le #18503971
Michel Decima a écrit :
Je ne sais pas si la fonction membre clear() est vraiment utile,



J'aurais eu la remarque sur la fuite mémoire si je n'en avais pas
proposé ;)

mais elle devrait au moins remettre a NULL le pointeur apres
le delete, sinon il y aura un soucis apres le prochain get().



Tout à fait, je pensais l'avoir écrit. mais bon, implémentation naïve
j'avais dit :p

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position
Michel Decima
Le #18507401
Mickaël Wolff a écrit :
Michel Decima a écrit :
Je ne sais pas si la fonction membre clear() est vraiment utile,



J'aurais eu la remarque sur la fuite mémoire si je n'en avais pas
proposé ;)



Non, parce qu'il n'y a qu'une seule allocation et que l'objet alloué
va perdurer jusqu'a la fin du programme. Si le systeme recupere
automatiquement toute la memoire utilisee par le programme a la fin
de celui-ci, ca ne va deranger personne, sauf un outil d'analyse
de gestion de mémoire.

mais elle devrait au moins remettre a NULL le pointeur apres
le delete, sinon il y aura un soucis apres le prochain get().



Tout à fait, je pensais l'avoir écrit. mais bon, implémentation naïve
j'avais dit :p




Oui.
Publicité
Poster une réponse
Anonyme