Bonjour,
Dans une application multi-thread, j'utilise un singleton basé sur un shared_ptr
Lorsque j'ai testé ce code pour la première fois Visual Studio m'a rapporté une fuite de mémoire. Cependant, il semble s'agir d'un faux positif dû au fait que la détection des fuites de mem. est faite avant la destruction des champs statiques. Je suis d'ailleurs capable de m'arrêter sur un break point dans le destructeur de saSINGLETON_INSTANCE.
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 namespace usb { class cUSBManager { /* ATTRIBUTES */ static boost::shared_ptr<cUSBManager> saSINGLETON_INSTANCE; protected: (... des champs ...) /* METHODS */ public: ~cUSBManager(); (... des méthodes ...) static boost::shared_ptr<cUSBManager> mGetInstance(); private: // This class is a singleton, use factory to get the instance cUSBManager(); }; } /* Statics var and func for singleton management */ boost::shared_ptr<cUSBManager> usb::cUSBManager::saSINGLETON_INSTANCE = boost::shared_ptr<cUSBManager>(); boost::shared_ptr<cUSBManager> usb::cUSBManager::smGetInstance() { if(!cUSBManager::saSINGLETON_INSTANCE.get()) cUSBManager::saSINGLETON_INSTANCE = boost::shared_ptr<cUSBManager>(new cUSBManager()); return cUSBManager::saSINGLETON_INSTANCE; }
Ce problème est pénible car je ne voudrais pas devoir trier tous les rapports de fuite de mémoire.
D'où ma question: comment peut on se débarrasser mon output de ces fausses (si elles le sont vraiment) fuites de mémoires ?
Merci d'avance
Ju
Partager