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 ?