Bonjour à toutes et à tous,
reprenant un code j'essaie d'en supprimer les fuites mémoires. Cependant je suis actuellement sur une partie dont je n'arrive pas à me dépatouiller.
Une Map est utilisée pour stocker des pointeurs de n'importe quoi (on y stocke aussi bien des pointeurs vers des entiers que des pointeurs vers des Vectors, ect).
Code c++ : 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 #include <iostream> #include <map> using namespace std; class BenchEnvironment { private: static BenchEnvironment* pInstance; public: virtual ~BenchEnvironment(); static BenchEnvironment* getInstance(); void addData(std::string key, void* p_dataToAdd); void* getData(std::string key); private: BenchEnvironment(); private: std::map<std::string, void*> datas; };
Code c++ : 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 #include "BenchEnvironment.h" BenchEnvironment *BenchEnvironment::pInstance = NULL; BenchEnvironment::BenchEnvironment() { } BenchEnvironment::~BenchEnvironment() { pInstance = NULL; } BenchEnvironment *BenchEnvironment::getInstance() { if (pInstance == NULL) { pInstance = new BenchEnvironment(); } return pInstance; } void BenchEnvironment::addData(string key, void *p_dataToAdd) { datas[key] = p_dataToAdd; } void *BenchEnvironment::getData(std::string key) { return datas.find(key)->second; }
Utilisant la class de cette manière :
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int test = 1; BenchEnvironment::getInstance()->addData("test", &test);
Cela m'ajoute 3 allocations mais aucune désallocation selon Valgrind.
Est-ce parce que c'est du void* qu'il ne sait pas comment aller libérer la mémoire des pointeurs ?
Partager