Bonjour,
voilà, je me suis fait un Garbage Collector pour une application native C++ mais j'ai un léger problème de changement d'adresse sur le pointeur this.
L'idée de mon Garbage Collectore est d'en faire un template de classe dont tous les classes l'utilisant seront contraintes d'implémenter une interface (sans méthode) IGcObject.

Voici le code :
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
38
39
40
41
42
43
44
45
interface IGcObject
{
};
 
template<class X> class CGarbageCollector
{
public :
	CGarbageCollector () 
	{
	};
 
	void Purge () 
	{
		POSITION pos = m_ObjectListToRelease.GetHeadPosition();
		while (pos)
		{
			X* elementtodelete = m_ObjectListToRelease.GetNext(pos);
			delete elementtodelete;
		}
	};
 
	~CGarbageCollector () 
	{
	};
 
public :
	void AddRef (X* inObject)
	{
		m_ObjectListToRelease.AddHead(inObject);
	};
private :
	CList<X*, X*> m_ObjectListToRelease;
};
 
class UseGrab1 : public IGcObject
{
public :
	explicit UseGrab1 (CGarbageCollector<IGcObject>* inGc)
	{
		inGc->AddRef(this);
	};
	virtual ~UseGrab1()
	{
	};
};
Et l'utilisation à titre d'exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
			UseGrab1* _g1_1 = new UseGrab1(&mygarbagecollector);
			UseGrab1* _g1_2 = new UseGrab1(&mygarbagecollector);
			UseGrab2* _g2_1 = new UseGrab2(&mygarbagecollector);
			mygarbagecollector.Purge ();
Le petit problème vient du passage du constructeur de mes objets _g1_1, _g1_2 et _g1_3 à la méthode AddRef() de mon Garbage Collector.
Le problème est le suivant, je vais en debug dans le constructeur de UseGrab1, j'ai donc dans ma Call Stack :
Je regarde l'adresse de mon pointeur this et je trouve la valeur 0x00a37F78 et dès que je passe dans la méthode AddRef de mon Garbage Collector :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
	void AddRef (X* inObject)
	{
		m_ObjectListToRelease.AddHead(inObject);
	};
Je me retrouve avec l'adresse de inObject valant 0x00a37F7c.
Et ainsi de suite pour chaque objet, mon adresse de pointeur sur l'objet courant augmente de 4 bits
Au début, je pensais que comme étant dans mon constructeur, mon objet n'était pas encore finalisé, j'ai donc appelé la méthode AddRef depuis une autre méthode de ma classe UseGrab1, même résultat, mon adresse de pointeur this augmente de 4 bits, j'avoue que j'ai fait le tour du problème et je ne vois pas trop ce qui se passe.
Une idée svp ?