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

Déclaration d'objet et récupération d'instance

5 réponses
Avatar
Nicolas ROBERT
Bonjour,

J'ai écrit une classe qui me permet de générer des fichiers de Log. Cette
classe a pour objectif de mutualiser toutes les sorties d'erreur.
Mon programme est constitué de plusieurs "briques" dont le fonctionnement
diffère, mais qui utilisent toute la même classe pour la gestion des
erreurs.

Actuellement, ma classe est instanciée de manière automatique, cad que mon
objet est simplement déclaré de la manière suivante:
ClassLog MaLog;
Cette méthode de déclaration limite la durée de vie de mon objet au bloc
dans lequel il a été déclaré.
Pour que cette durée de vie soit différente, il faut que je fasse une
instanciation dynamique:

ClassLog MaLog=new ClassLog;

Cette méthode d'instanciation me convient mieux, à la condition que je
puisse récupérer aisément une instance préalablement créée, sans avoir à
recréer de nouvelle instance.

Comment puis-je m'y prendre pour récupérer une instance éxistante ?

5 réponses

Avatar
Loïc Joly
Nicolas ROBERT wrote:

Bonjour,

J'ai écrit une classe qui me permet de générer des fichiers de Log. Cette
classe a pour objectif de mutualiser toutes les sorties d'erreur.
Mon programme est constitué de plusieurs "briques" dont le fonctionnement
diffère, mais qui utilisent toute la même classe pour la gestion des
erreurs.

Actuellement, ma classe est instanciée de manière automatique, cad que mon
objet est simplement déclaré de la manière suivante:
ClassLog MaLog;
Cette méthode de déclaration limite la durée de vie de mon objet au bloc
dans lequel il a été déclaré.
Pour que cette durée de vie soit différente, il faut que je fasse une
instanciation dynamique:

ClassLog MaLog=new ClassLog;

Cette méthode d'instanciation me convient mieux, à la condition que je
puisse récupérer aisément une instance préalablement créée, sans avoir à
recréer de nouvelle instance.

Comment puis-je m'y prendre pour récupérer une instance éxistante ?


Peut-être recherches-tu un singleton ?

Par exemple :

class ClassLog
{
private:
ClassLog();
public:
ClassLog &instance();
};

ClassLog &ClassLog::instance()
{
static ClassLog myInstance;
return myInstance;
}

--
Loïc

Avatar
drkm
Loïc Joly writes:

class ClassLog
{
private:
ClassLog();
public:
ClassLog &instance();
};


Sans « static », ça peut pas servir à grand-chose, de l'extérieur :-)

--drkm

Avatar
Loïc Joly
drkm wrote:

Loïc Joly writes:


class ClassLog
{
private:
ClassLog();
public:
ClassLog &instance();
};



Sans « static », ça peut pas servir à grand-chose, de l'extérieur :-)


Oups... On va plaider la fatigue, d'accord ? ;)

En ajoutant le static donc :

class ClassLog
{
private:
ClassLog();
public:
static ClassLog &instance();
};


--
Loïc


Avatar
Nicolas ROBERT
"Loïc Joly" a écrit dans le message de
news:ccutrf$mk1$
drkm wrote:

Loïc Joly writes:


class ClassLog
{
private:
ClassLog();
public:
ClassLog &instance();
};



Sans « static », ça peut pas servir à grand-chose, de l'extérieur :-)


Oups... On va plaider la fatigue, d'accord ? ;)

En ajoutant le static donc :

class ClassLog
{
private:
ClassLog();
public:
static ClassLog &instance();
};



Tout à fait ce que je cherchais. Merci Beaucoup.
Je ne connaissais pas le terme singleton. Pour ceux qui ont la même
problématique que moi, et qui aimeraient en savoir plus
sur le singleton, voici un exemple plutôt clair et simple:
http://www.game-lab.com/?p=viewtut&idP&l=4



--
Loïc




Avatar
Arnaud Meurgues
Nicolas ROBERT wrote:

Tout à fait ce que je cherchais. Merci Beaucoup.
Je ne connaissais pas le terme singleton.


Dans ce cas, je ne saurais que trop conseiller la lecture de "Design
Patterns" de Gamma et al.
Il présente le pattern Singleton et bien d'autres pas moins utiles
(decorator, visitor,...). Et c'est, de nos jours, un vocabulaire très
utile (voire indispensable) à connaître.

--
Arnaud
(Supprimez les geneurs pour me répondre)