Bonjour a tous.
Suite � des recherches sur le patern (ou anti) singleton, j'ai pens� une chose.
Pourquoi ne pas globaliser des variables locales ?
Ca donnerai un truc du genre :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
#include <iostream>
 
using namespace std;
 
template <class T> class Globalisator 
{
protected:
    static T* m_instance;
 
public:
    static T* GetInstance()
    {
        if(m_instance==0)
 
            throw; //ici trow seul pour dire que c'est pas bien de 
                   //ne pas initialiser.Il faudrai définir une 
                   // exeption perso.
        return m_instance;
    }
 
    static void SetInstance(T* inst)
    {
        m_instance=inst;
    }
 
    static void Release()
    {
        m_instance=0;
    }
};
 
template <class T> T* Globalisator<T>::m_instance=0;
 
//classe de test
//aucune utilité
class Test : public Globalisator<Test> 
{
    int m_i;
public:
    Test():m_i(0){};
    int Test2(){m_i++;return m_i;}
 
};
 
//fonction de test
//Réelle utiité dans des classes
void fct()
{
    cout<<Test::GetInstance()->Test2()<<endl;
 
}
int main (void)
{
    Test t1,t2;
 
//je fais ca sur des variables locales.
//Mais comme elles sont locales a main , c'est pas grave.
//le mieux serait de le faire sur des pointeurs alloué dynamiquement.
    Test::SetInstance(&t1); 
 
    fct();
    fct();
    Test::SetInstance(&t2);
    fct();
    Test::Release(); 
    fct(); //test du throw
 
    return 0;
}
De cette facon , on peut rendre globale une variable un temps donn� en sachant o� et quand le programeur d�truit manuellemnt la donn�e.

Je sais que mon truc c'est du singleton-like mais je tient quand m�me a dire que ce n'est un singleton,puisque on peut cr�e autant d'instance qu'on veut et que la classe na (logiquement) pas la gestion de la cr�ation et de la destruction des variables.

Alors qu'en pensez vous ?

Edit : existe un moyen d'empecher le destruction de la donn�e si on fait un delete sur Test::GetInstance() ?