Bon, je me met tout doucement à la STL, et j'ai un peu de mal...
J'ai une classe A du style:
Code :
- class A
- {
- public:
- string Nom;
-
- A(void);
- virtual ~A();
- };
- A::A()
- {
- Nom = "";
- cout << ">Creation A(). Adresse object:" << this << " Valeur Nom:" << Nom << endl;
- }
- A::~A()
- {
- cout << "<Destruction A(). Adresse object:" << this << " Valeur Nom:" << Nom << endl;
- }
|
Avant ca, j'ai mes includes qui vont bien:
Code :
- #include <iostream>
- #include <stdlib.h>
- #include <list>
- using namespace std;
|
et le main suivant:
Code :
- int main(int argc, char *argv[])
- {
- list<A> maListe;
-
- // Creation objet
- A *test = new A;
- test->Nom = "Test1";
-
- delete test;
- system("PAUSE" );
- return 0;
- }
|
Et ca me donne le résultat suivant:
>Creation A(). Adresse object:0x3d3e88 Valeur Nom:
<Destruction A(). Adresse object:0x3d3e88 Valeur Nom:Test1 |
Jusqu'ici, rien de bien sorcier, c'est normal que tout marche bien.
J'ai bien les mêmes adresses.
Là ou je capte plus c'est que si je fais un
Code :
- maListe.push_back(*test); maListe.clear();
|
à la place de
, et bien ca me donne le résultat suivant:
>Creation A(). Adresse object:0x3d3e88 Valeur Nom:
<Destruction A(). Adresse object:0x3d2448 Valeur Nom:Test1 |
Note: je fais un maListe.clear() pour que ca s'affiche avant que le programme quitte, sinon on a pas le temps de voir le cout... En remplacant les cout par des MessageBox dans la classe A et sans le maListe.clear() dans le main(), le résultat est le même car le destructeur est appelé quand l'objet list est détruit...
Donc ma question est la suivante: pourquoi l'adresse de mon objet A est modifiée quand je l'ajoute à la liste ???
Message édité par spark le 01-06-2003 à 20:34:08