Gestion de la mémoire en C : effacer des vecteurs ou supprimer des objets
En C, il est crucial de comprendre comment la mémoire est gérée. Lorsqu'il s'agit de structures de données dynamiques telles que des vecteurs et des pointeurs, il est essentiel de libérer la mémoire allouée de manière appropriée.
Considérez l'exemple de code suivant :
<code class="cpp">tempObject obj1; tempObject obj2; vector<tempObject> tempVector; tempVector.pushback(obj1); tempVector.pushback(obj2); tempVector.clear();</code>
La question se pose de savoir si l'appel de clear() sur un Le vecteur libère automatiquement la mémoire occupée par les objets qu'il contient ?
Pour les vecteurs contenant des objets
Lorsque l'appel de clear() détruit les objets dans le vecteur, il ne libère pas la mémoire allouée. Itérer sur les éléments vectoriels et les supprimer individuellement n'aidera pas non plus.
Pour libérer efficacement la mémoire associée au vecteur, vous pouvez utiliser la stratégie suivante :
<code class="cpp">vector<tempObject>().swap(tempVector);</code>
Cela crée un vecteur vide sans mémoire allouée et l'échange avec tempVector, libérant ainsi efficacement la mémoire.
Pour les vecteurs contenant des pointeurs vers des objets
Le comportement est similaire pour les vecteurs contenant des pointeurs vers objets. Appeler clear() sur un vecteur de pointeurs détruira les pointeurs mais pas les objets auxquels ils font référence. Pour libérer de la mémoire, vous avez deux options :
Fonction Shrink_to_fit de C 11
C 11 a introduit la fonction Shrink_to_fit, qui peut être appelée après clear( ). Bien que cela réduise théoriquement la capacité du vecteur à s'adapter à sa taille, il est important de noter qu'il s'agit d'une demande non contraignante et qu'elle peut être ignorée par certaines implémentations.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!