list, push_back et ses joyeux amis... Je comprends pas tout [STL] - C++ - Programmation
Marsh Posté le 01-06-2003 à 20:35:18
Désolé si je reponds pas pendant qq heures, je dois partir.
Merci à celui qui m'expliquera pourquoi ca fait ca, ou bien où je me trompes.
Marsh Posté le 01-06-2003 à 20:39:55
par ce que les conteneur C++ contiennent des copies! fait ton operateur de copie et tu veras. d'ailleurs tu passe toit meme un Truc et pas un Truc*
quel interet de passé par un new/delete
edit: et pas besoin de clear non pus
Marsh Posté le 02-06-2003 à 00:32:11
++Taz a écrit : par ce que les conteneur C++ contiennent des copies! fait ton operateur de copie et tu veras. d'ailleurs tu passe toit meme un Truc et pas un Truc* |
ok, je savais pas que c'était des copies Je vais voir ca...
Marsh Posté le 02-06-2003 à 00:41:51
Donc si j'ai bien compris, je fais un object test genre
Code :
|
ca me créé mon objet test normalement, et vu que c'est plus en dynamique, les constructeur et destructeurs sont appelés automatiquements.
Ensuite, en faisant un push_back(test), ca ajoute un nouvel élément test' identique à test mais à une adresse différente (forcément) et son propre destructeur (donc, derriere il doit faire un memcpy de test dans test').
Donc, j'aurai l'appel de 2 destructeurs. celui de test et test'
C'est bien comme ca que ca marche ?
Marsh Posté le 02-06-2003 à 06:55:02
toi t'as fait du C... y a pas de memcpy, y a création d'un nouvel objet avec l'opérateur de recopie synthétisé qui procède à une recopie membre à membre. achète toi un vrai bouquin de C++ avant d'attaquer STL, par ce que là, c'est assez désastreux
Marsh Posté le 01-06-2003 à 20:32:56
Bon, je me met tout doucement à la STL, et j'ai un peu de mal...
J'ai une classe A du style:
Avant ca, j'ai mes includes qui vont bien:
et le main suivant:
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
à 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