dois-je supprimer smart pointeur manuellement?

Cela peut être une question stupide mais je ne suis pas sûr de la réponse. Le code suivant lire un fichier, et pour chaque ligne du fichier, un pointeur intelligent est créé par "nouveau". Si le pointeur intelligent sera utilisé dans l'avenir, il est stocké dans une liste, sinon il n'est pas stocké.

Ma question est que: si le pointeur intelligent n'est pas stocké, que cela va provoquer risque de fuite de mémoire? Merci.

int main(){
    .....;
    std::list<SomeClass> aList;
    while(inFile >> ss){
         std::tr1::shared_ptr<SomeClass> aPtr(new SomeClass());
         //do something in foo(aPtr) to aPtr, 
         //if aPtr will be used later, then it's stored in aList
         //otherwise, it's not stored
         foo(aPtr);
    }
    .....;
}
Le terme de "supprimer" est malheureux, en tout cas. Pour les pointeurs intelligents, l'opération est appelée reset. I. e. dans ce cas, vous pourriez écrire aPtr.reset();. Mais vous aurez rarement besoin de cela, généralement vous l'utilisez lorsque le pointeur intelligent doit faire référence à un autre objet: aPtr.reset(new SomeClass("Another Object"));

OriginalL'auteur EXP0 | 2011-07-13