Bonjour à tous
J'ai un problème pour comprendre et résoudre une erreur d'exécution lors de l'ajout d'un élément dans un vecteur.
Ce code ne produit pas d'erreur, j'ai la séquence d'appel constructeur/destructeur attendue : default construteur A (variable a) -> copy constructeur A (dans le push_back) -> destructeur A (variable a) -> appel méthode, mon vecteur contient bien 1 élément et la méthode est exécutée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class A { /*complexe, plein de sous-classe... */ }; std::vector<A> v; A a; v.push_back(a); v.back().method();
Par contre, avec ce code :
J'ai une erreur. Mon objet est détruit directement après le resize et mon vecteur est vide. J'ai la séquence suivante : default constructeur (dans le resize) -> default destructeur (dans le resize) -> appel méthode = erreur (normal puisque mon objet est détruit).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class A { /*complexe, plein de sous-classe... */ }; std::vector<A> v; v.resize(v.size()+1); v.back().method();
1. Pourquoi ce comportement différent ?
2. Comment trouver l'erreur ?
A priori, mon constructeur par défaut est correct puisqu'il ne produit pas d'erreur dans le premier code...
Merci pour vos conseils
PS: en complément, pas d'exception produite.
système Ubuntu 64b, gcc 4.3
Partager