C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Singletons

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Vincent Jacques
Guest





PostPosted: Wed Jun 28, 2006 10:55 pm    Post subject: Singletons Reply with quote



Bonsoir à tous,

dans une classe Singleton implémentée avec un membre statique Singleton*
m_Instance et une fonction membre statique Singleton* GetInstance() qui
crée le Singleton (avec un new) lors de son premier appel, qui doit avoir
la responsabilité de delete le singleton ?

Merci,
--
Vincent Jacques

"S'il n'y a pas de solution, c'est qu'il n'y a pas de problème."
Devise Shadok
Back to top
Fabien LE LEZ
Guest





PostPosted: Wed Jun 28, 2006 11:20 pm    Post subject: Re: Singletons Reply with quote



On Wed, 28 Jun 2006 19:55:48 +0200, Vincent Jacques
<vincent.jacques (AT) student (DOT) ecp.fr>:

Quote:
qui doit avoir
la responsabilité de delete le singleton ?

Typiquement, personne. L'objet n'est jamais détruit ; la mémoire est
libérée par l'OS à la sortie du programme.
Back to top
Michael
Guest





PostPosted: Wed Jun 28, 2006 11:49 pm    Post subject: Re: Singletons Reply with quote



Fabien LE LEZ <gramster (AT) gramster (DOT) com> wrote in
news:72i5a29b3r55gsgv7a93078flh9h2aepkh (AT) 4ax (DOT) com:

Quote:
On Wed, 28 Jun 2006 19:55:48 +0200, Vincent Jacques
vincent.jacques (AT) student (DOT) ecp.fr>:

qui doit avoir
la responsabilité de delete le singleton ?

Typiquement, personne. L'objet n'est jamais détruit ; la mémoire est
libérée par l'OS à la sortie du programme.



Néanmoins il existe des solutions, dont une développée par Alexandrescu dans
son bouquin sur les patterns, via la fonction std::atexit si j'ai bonne
mémoire
Back to top
Hamiral
Guest





PostPosted: Thu Jun 29, 2006 2:59 am    Post subject: Re: Singletons Reply with quote

Michael <michael.at.gmail.dot.com> wrote:
Quote:
Typiquement, personne. L'objet n'est jamais détruit ; la mémoire est
libérée par l'OS à la sortie du programme.

Néanmoins il existe des solutions, dont une développée par Alexandrescu
dans son bouquin sur les patterns, via la fonction std::atexit si j'ai
bonne mémoire

Cet article trouvé sur le net, peut éventuellement être utile :
http://flure.free.fr/dotclear/index.php?2006/04/21/6-static-pimpl-singleton

--
Hamiral
Back to top
kanze
Guest





PostPosted: Thu Jun 29, 2006 9:11 am    Post subject: Re: Singletons Reply with quote

Vincent Jacques wrote:

Quote:
dans une classe Singleton implémentée avec un membre statique
Singleton* m_Instance et une fonction membre statique
Singleton* GetInstance() qui crée le Singleton (avec un new)
lors de son premier appel, qui doit avoir la responsabilité de
delete le singleton ?

Typiquement, personne. On ne veut pas qu'il soit détruit, afin
d'être sûr que personne s'en serve après sa destruction (dans le
destructeur d'un objet statique, par exemple).

Si ça ne gène pas qu'il soit détruit, la solution classique,
c'est de ne pas utiliser de pointeur, et de le déclarer comme
variable statique locale :

Singleton&
Singleton::instance()
{
static Singleton theOneAndOnly ;
return theOneAndOnly ;
}

Du coup, c'est le compilateur qui s'occupe de sa destruction.
(Mais attention aux problèmes de thread avec cette solution.)

Sinon, affecter le pointeur à un auto_ptr (ou un
boost::shared_ptr) fait aussi l'affaire.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Back to top
Vincent Jacques
Guest





PostPosted: Thu Jun 29, 2006 9:11 am    Post subject: Re: Singletons Reply with quote

Merci à tous les trois pour vos réponses.

Hamiral wrote:
Quote:
http://flure.free.fr/dotclear/index.php?2006/04/21/6-static-pimpl-singleton

Tiens, une erreur 503, pas courant, ça.

Bonne journée,
--
Vincent Jacques

"S'il n'y a pas de solution, c'est qu'il n'y a pas de problème."
Devise Shadok
Back to top
Hamiral
Guest





PostPosted: Thu Jun 29, 2006 4:21 pm    Post subject: Re: Singletons Reply with quote

Vincent Jacques wrote:
Quote:

http://flure.free.fr/dotclear/index.php?2006/04/21/6-static-pimpl-singleton

Tiens, une erreur 503, pas courant, ça.

Effectivement ! Ça marchait avant que je poste, puis ça ne marchait plus.
Mais il semblerait que tout soit rentré dans l'ordre maintenant ...

--
Hamiral
Back to top
Vincent Jacques
Guest





PostPosted: Thu Jun 29, 2006 11:17 pm    Post subject: Re: Singletons Reply with quote

Hamiral wrote:
Quote:
Vincent Jacques wrote:
http://flure.free.fr/dotclear/index.php?2006/04/21/6-static-pimpl-singleton
Tiens, une erreur 503, pas courant, ça.

Effectivement ! Ça marchait avant que je poste, puis ça ne marchait plus.
Mais il semblerait que tout soit rentré dans l'ordre maintenant ...

Vi. Pas mal, cet article, merci,
--
Vincent Jacques

"S'il n'y a pas de solution, c'est qu'il n'y a pas de problème."
Devise Shadok
Back to top
kanze
Guest





PostPosted: Fri Jun 30, 2006 9:11 am    Post subject: Re: Singletons Reply with quote

Vincent Jacques wrote:
Quote:
Hamiral wrote:
Vincent Jacques wrote:
http://flure.free.fr/dotclear/index.php?2006/04/21/6-static-pimpl-singleton
Tiens, une erreur 503, pas courant, ça.

Effectivement ! Ça marchait avant que je poste, puis ça ne
marchait plus. Mais il semblerait que tout soit rentré dans
l'ordre maintenant ...

Vi. Pas mal, cet article, merci,

Si je ne me trompe pas, ça correspond à peu près à comment
j'implémentais les singletons avant le livre des « Design
Patterns ». Sauf que je n'utilisais pas de compteur de
référence (et je ne detruisait jamais l'objet même).

Un des principes fondamentaux d'un singleton, c'est qu'il n'est
créé qu'une fois, et qu'il existe alors jusqu'à la fin du
programme. Ce n'est pas le cas de la solution proposée dans
l'article, où son objet (réel) risque d'être créé et detruit
souvent. Prenons, par exemple, une des utilisations fréquentes
d'un singleton, c'est pour la configuration -- avec la solution
proposée, on va probablement créer l'objet une première fois
pour lire le fichier de configuration, puis le détruire, puis le
créer de nouveau quand on veut lire la configuration.

En somme, c'est bien beau, mais ce n'est pas un singleton.

Aussi : avant le livre, on se servait bien de mes singletons en
en définissant une instance. J'utilisais effectivement une
variante de l'idiome pimpl, mais avec un pointeur static, et le
constructeur qui ne construisait l'objet d'implémentation que si
c'était nul. J'ai changé surtout parce que personne ne connaît
mon idiome, tandis que dès qu'on voit une classe avec une
fonction statique « instance() » et pas de constructeurs
publics, on reconnaît un singleton. Et si c'est un peu plus
verbieux que ce que je faisais avant, c'est plus
« honnête » ; on ne construit pas des « instances » qui
n'en sont pas dans les faits.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Back to top
kUfa
Guest





PostPosted: Wed Jul 05, 2006 9:12 am    Post subject: Re: Singletons Reply with quote

Comme cite plus haut, je conseille le bouquin "Modern C++ Design"
d'Andrei Alexandrescu et les articles associes (il y en a pas mal).
Loki (sur sourceforge) possede ses singletons, qui sont tres utiles
(sachant que l'ordre de destruction des singletons peut etre defini),
enfin a mon avis. Le code n'est pas si difficile a comprendre si tu
maitrise les templates.

/k
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.