Pointeur intelligent et singleton [résolu] - C++ - Programmation
Marsh Posté le 13-12-2014 à 21:07:31
Bonsoir !
Dans la fonction "instance", vous créez une variable locale "s_pInstance", qui masque le membre statique, et c'est à cette variable que vous donnez une valeur, pas au membre, qui vaut donc toujours "nullptr", puisqu'aucune valeur ne lui a été affectée ...
Enlevez le "std::unique_ptr<TextureManager>" et faites une affectation (je n'ai plus la syntaxe du std::unique_ptr en tête, je ne sais pas si il faut faire un "=" ou un "set" pour lui affecter une valeur).
Bonne continuation !
Marsh Posté le 14-12-2014 à 07:16:58
Merci de m'avoir mit sur la bonne voie, le problème est résolu :
Code :
|
Une question tout de même à propos du code original si possible, j'ai remarqué que le destructeur n’étais jamais appeler du coup le pointeur renvoyé par "new TextureManager();" n’étais jamais libéré (a mon avis), même si j'utilisais le code ci-dessous, quelqu'un aurait-il une explication ?
Code :
|
Marsh Posté le 15-12-2014 à 08:03:19
Dans l'ancienne version, l'attribut "s_pInstance" restait toujours à NULL, vu que c'était une variable locale (qui n'était a priori jamais libérer) qui était allouée, en lieu et place de l'attribut.
En revanche, un destructeur public pour une classe singleton, c'est vraiment très étrange, pas du tout dans l'état de l'art (et casse-gueule dans environ 100 % des cas)
Bonne continuation !
Marsh Posté le 13-12-2014 à 20:56:21
Salut, j'essai de transposer ce code en utilisant des pointeur intelligent et je sèche...
L'original :
Ma sauce :
Le singleton ne fonctionne plus, s_pInstance reçoit une nouveau pointeur a chaque appelle de "Instance()"
Message édité par bqron le 14-12-2014 à 07:17:58