le destructeur de chaque instance d'une classe est appelé automatiqement en fin de vie de l'instance :
- en fin de scope pour une instance automatique :
Code :
- // debut de scope
- {
- std::vector<int> a(5)
- // plein de code
- }
- // fin de scope : ~vector() est appellé tout seul
|
- à l'appel de delete pour une instance dynamique
Code :
- std::vector<int>* ptrVec = new std::vector<int>(5);
- // plein de code
- delete ptrVec;
|
Pour la destruction du CONTENU d'une instance de vector, le destructeur de vector appelle en
séquence le destructeur de chacun de ses éléments. Dans le cas d'un vecteur de pointeur, il faut
effectivement explicitement libérer la mémoire pointée .
Code :
- std::vector<int*> a(5); // vecteur de 5 pointeur vers un int
- for(int i=0;i<a.size();i++)
- a.push_back( new int(2*i+1) );
- // plein de code
- for(int i=0;i<a.size();i++)
- delete a[i];
|
En général, on évite de faire ça (sauf cas de force majeur). On préfére les vector de boost::smart_ptr.
Message édité par Joel F le 03-12-2007 à 19:19:49