Bonjour à tous,
J'ai une class "App" qui me permet de stocker les pointeur "globaux" de mon appli qui ont besoin d'être accessible de partout :
Chaque pointeur à un getter et un setter. Au démarrage de l'appli les pointeurs sont passés à la classe de la façon suivante :
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 class App { public: static App& Get(); void SetLogsManager(util::logs::Manager * manager) { mLogManager = manager; } logs::Manager * GetLogsManager() { return mLogManager; } void Clear() { delete mLogManager; } ~App() { }; private: /** Pointeur du singleton */ static App* mInstance; /** Gestionnaire de journaux */ logs::Manager * mLogManager; App(); App(const App& rs); App& operator = (const App& rs) { if (this != &rs) { mInstance = rs.mInstance; } return *this; } }; }
Je peux alors ensuite accéder de partout à mes pointeurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 util::App& app = util::App::Get(); app.SetLogsManager(new logs::Manager());
La class App s'occupe de détruire tous les pointeurs à la fermeture. Le problème c'est que quelqu'un qui utilise cette classe ne sait pas forcément que la désallocation est gérée par la classe et peut donc potentiellement très bien détruire lui même les pointeur fournit par la classe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part util::App::Get().GetLogsManager()->write('hello');
Que pourrais je faire pour être certains que seul App soit le propriétaire des pointeurs et qu'elle soit la seul entité capable de les désallouer ?
Merci
Partager