2010-07-28 2 views
-1

AmisGestion de la mémoire + conteneurs

Les conteneurs disposent d'un mécanisme de gestion automatique de la mémoire. Lorsque des valeurs sont insérées à l'aide de la commande copy Constructor et que des valeurs sont supprimées, destructor est appelé pour chaque valeur. Après que le nombre d'éléments ait été lu, quel stade desctuctor est appelé?

Comment une classe de conteneur gère-t-elle la mémoire lorsque les éléments sont lus et non effacés?

Un grand merci

+1

cette question ne fait pas beaucoup de sens dans sa forme actuelle, pouvez-vous préciser? probablement ajouter du code et décrire ce qui se passe et ce que vous attendez? – Naveen

+0

Cette question n'a pas de sens pour moi. Peut-être qu'un peu d'exemple de code pour montrer ce que vous voulez dire aiderait. –

+0

battu moi :) –

Répondre

1

Les conteneurs n'ont pas de gestion de la mémoire, les objets ont une gestion de la mémoire.

obj a; 
{ 
    std::vector<obj> b; 
    b.push_back(a);//copy of 'a' taken here 
}//copy of 'a' in vector destructed here because the copy goes out of scope not specifically the vector 

//'a' still exists 

alternativement

obj* a = new obj; 
{ 
    std::vector<obj*> b; 
    b.push_back(a); 
    b.push_back(new obj);//pointer of type obj taken here 
}//obj destructor not called 
//got a memory leak as the obj created still exists but has no reference 
delete a;//but can still delete a 
+0

très bien expliqué. Merci – ronan

0

Les objets dans un conteneur obtient lorsque vous effacez détruits explicitement éléments et quand votre réservoir est hors de portée.

2

Comment une classe de conteneur gère-t-elle la mémoire lorsque les éléments sont lus et non effacés?

Ce n'est pas le cas. Il n'y a pas de gestion de la mémoire à faire.

Lorsque des objets sont créés, la mémoire pour ceux-ci doit être allouée, et lorsqu'ils sont détruits, la mémoire doit être libérée. Lorsque vous lisez un élément existant, vous ne créez ou ne détruisez rien, donc le conteneur n'a rien à faire.

+0

Merci Alors la mémoire est libérée lorsque le conteneur est hors de portée. ou vous appliquez effacez i.e puis destructeur est appelé. – ronan