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.

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();
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.

Par contre, avec ce code :
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();
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).

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