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:
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:
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: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