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 :
Et l'utilisation � titre d'exemple :
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() { }; };
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.
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 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 inGc->AddRef(this);
Je me retrouve avec l'adresse de inObject valant 0x00a37F7c.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 void AddRef (X* inObject) { m_ObjectListToRelease.AddHead(inObject); };
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 ?
Partager