Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Objet global : méthode propre?

5 réponses
Avatar
Gégé
Bonjour,

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

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

Naturellement, je pensais =E0 un objet instanci=E9 de fa=E7on globale avant
le main, mais est-ce tr=E8s propre ... ?

Quelqu'un aurait-il une suggestion ? Merci.

G

5 réponses

Avatar
Mickaël Wolff
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 <http://lupusmic.org/pro/>
Avatar
Michel Decima
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().
Avatar
Gégé
ca me parfait nickel pour ce que je veux faire
merci bcp pour cette suggestion.
Avatar
Mickaël Wolff
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 <http://lupusmic.org/pro/>
Avatar
Michel Decima
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.