Bonjour à tous,
Je viens à vous car je me heurte à un problème que je n'arrive pas à comprendre.
Je tente d'implémenter une classe singleton Template réutilisable ; en m'inspirant de ce que je trouve sur le net, j'arrive à une première implémentation (non encore thread-safe, mais c'est pas la question), avec des pointeurs classiques, qui marche :
et le main pour tester :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
Ceci compile et marche parfaitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
Ensuite, j'essaie une version avec des shared_ptr :
et le main à peine modifié :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
Et là, la belle erreur de compilation, qui en clair me dit qu'à la ligne 9 je fais appel aux constructeur et destructeur de Test, ce qui est interdit car ils sont private.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
L'erreur exacte du compilo est, sans toutes les inclusions de la stl (que j'ai remplacées par (...) pour rendre le truc lisible) :
(...)
SingletonSP.hpp:28:62: required from ‘static std::shared_ptr<_Tp1> SingletonSP<T>::getInstance() [with T = Test]’
main.cpp:6:9: required from here
SingletonSP.hpp:52:3: error: ‘Test::Test()’ is private
Test() {}
(...)
main.cpp:9:2: required from here
SingletonSP.hpp:53:3: error: ‘Test::~Test()’ is private
~Test(){}
(...)
Voilà, j'imagine qu'il s'agit d'une subtilité dans l'utilisation des shared_ptr que je ne vois pas, mais justement je ne la vois pas...
Précision, j'utilise g++ 4.8.1 avec les options -Wall, -Wextra et -std=c++11
Merci d'avance,
whityranger

 

 
		
		 
         
 

 
			
			

 
   
 


 Implémentation d'un singleton avec des std::shared_ptr
 Implémentation d'un singleton avec des std::shared_ptr
				 Répondre avec citation
  Répondre avec citation


 
			 
  
  
 
 
			 
  
 
				

 A méditer: La solution la plus simple est toujours la moins compliquée
A méditer: La solution la plus simple est toujours la moins compliquée Je te suggère d'aller faire un petit tour vers
 Je te suggère d'aller faire un petit tour vers  ). Le fait est qu'il ne s'agit pas ici de gérer une config dont les éléments accessibles doivent être définis avec soin, ni un transfert d'informations d'une source quelconque vers la classe qui se chargera de les traiter ; il s'agit de s'assurer qu'on ne charge en mémoire une et une seule fois des ressources partagées, et en l'occurrence un seul type de ressource (histoire de bien séparer les responsabilités) : les textures.
 ). Le fait est qu'il ne s'agit pas ici de gérer une config dont les éléments accessibles doivent être définis avec soin, ni un transfert d'informations d'une source quelconque vers la classe qui se chargera de les traiter ; il s'agit de s'assurer qu'on ne charge en mémoire une et une seule fois des ressources partagées, et en l'occurrence un seul type de ressource (histoire de bien séparer les responsabilités) : les textures. )
 ) 
						
Partager