À droite, le vecteur est copié comme prévu. Il y a un bon logiciel appelé geordi qui peut montrer:
{
using namespace tracked;
typedef vector<B> poly_t;
poly_t poly(3); // contains 3 B's
vector<poly_t> v;
v.push_back(poly);
}
Il suit la création/copies de tracked::B
. Voici le résultat:
B0* B1*(B0) B2*(B0) B3*(B0) B0~ B4*(B1) B5*(B2) B6*(B3) B4~ B5~ B6~ B1~ B2~ B3~
Ceci est sortie lorsque nous suivons seulement v.push_back
:
B4*(B1) B5*(B2) B6*(B3)
Comme vous le voyez, la première est créée comme B0 l'argument par défaut du constructeur de vecteur. Ensuite, cet objet est copié dans 3 B et ensuite B0 est à nouveau détruit lorsque le constructeur revient. poly est alors créé. Ensuite, nous le repoussons dans un vecteur de polygones. L'argument, poly, est copié dans un nouveau vecteur qui est créé dans le vecteur des polygones et géré par celui-ci.
S'il tombe en panne, le problème se situe probablement dans une autre partie de votre programme. Vérifie que le constructeur/constructeur de copie et le destructeur fonctionnent correctement et qu'ils ne suppriment pas les éléments deux fois si vous utilisez l'allocation de mémoire dynamique.
Le "class" Polygon (en fait un typedef) a déjà un bon constructeur de copie. Vous voulez probablement dire la classe Point. – ahy1
Oui, je l'ai fait.Merci pour cela - ont corrigé :-) – Peter