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 :

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;
		}
 
	};
}
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
util::App& app = util::App::Get();
app.SetLogsManager(new logs::Manager());
Je peux alors ensuite accéder de partout à mes pointeurs :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
util::App::Get().GetLogsManager()->write('hello');
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.

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