0

J'ai une classe comme ceci:comportement étrange de std :: vecteur

class OBJ{...}; 

class A 
{ 
    public: 
    vector<OBJ> v; 
    A(int SZ){v.clear(); v.reserve(SZ);} 
}; 

A *a = new A(123); 
OBJ something; 
a->v.push_back(something); 

Ceci est une version simplifiée de mon code. Le problème est en mode débogage il fonctionne parfaitement. Mais en mode release, il se bloque à la ligne "push_back". (avec tous les drapeaux d'optimisation OFF) Je l'ai débogué en mode release et le problème est dans le constructeur de A. la taille du vecteur est quelque chose de vraiment grand avec des valeurs factices et quand je l'efface, ça ne change pas ..

Savez-vous pourquoi?

Merci,

+0

Étant donné que le vecteur stocke les instances OBJ directement (au lieu de pointeurs vers OBJ), le push_back copie les instances OBJ de construction de copie. Le constructeur de copie pour OBJ est-il correctement implémenté? – Patrick

Répondre

0

je peux deviner - Je dirais que OBJ n'a probablement pas un constructeur de copie correctement mis en œuvre et/ou opérateur d'affectation et destructor.

+0

OBJ a un constructeur, un destructeur, un constructeur de copie, un constructeur par défaut. Ma question est "Pourquoi la capacité du vecteur est toujours quelque chose de très grand?" J'ai utilisé clear() et redimensionner (0). n'a pas fonctionné .. – Nima

+0

@Nima Le fait qu'il a ces derniers le rend encore plus probable que c'est le problème. Postez du vrai code. –