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 ?