 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Vincent Jacques Guest
|
Posted: Wed Jun 28, 2006 10:55 pm Post subject: Singletons |
|
|
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
|
Posted: Wed Jun 28, 2006 11:20 pm Post subject: Re: Singletons |
|
|
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
|
Posted: Wed Jun 28, 2006 11:49 pm Post subject: Re: Singletons |
|
|
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
|
Posted: Thu Jun 29, 2006 2:59 am Post subject: Re: Singletons |
|
|
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
|
Posted: Thu Jun 29, 2006 9:11 am Post subject: Re: Singletons |
|
|
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
|
Posted: Thu Jun 29, 2006 9:11 am Post subject: Re: Singletons |
|
|
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
|
Posted: Thu Jun 29, 2006 4:21 pm Post subject: Re: Singletons |
|
|
Vincent Jacques wrote:
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
|
Posted: Thu Jun 29, 2006 11:17 pm Post subject: Re: Singletons |
|
|
Hamiral wrote:
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
|
Posted: Fri Jun 30, 2006 9:11 am Post subject: Re: Singletons |
|
|
Vincent Jacques wrote:
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
|
Posted: Wed Jul 05, 2006 9:12 am Post subject: Re: Singletons |
|
|
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 |
|
 |
|
|
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
|
|