probleme de shared_ptr static
Bonjour,
Dans une application multi-thread, j'utilise un singleton basé sur un shared_ptr
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
|
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;
} |
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.
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