auto_ptr on wikipedia a déclaré que "un auto_ptr contenant un conteneur STL peut être utilisé pour empêcher toute modification supplémentaire du conteneur.". Il a utilisé l'exemple suivant:Pourquoi un auto_ptr peut "sceller" un conteneur
auto_ptr<vector<ContainedType> > open_vec(new vector<ContainedType>);
open_vec->push_back(5);
open_vec->push_back(3);
// Transfers control, but now the vector cannot be changed:
auto_ptr<const vector<ContainedType> > closed_vec(open_vec);
// closed_vec->push_back(8); // Can no longer modify
Si je décommenter la dernière ligne, g ++ signale une erreur
t05.cpp:24: error: passing ‘const std::vector<int, std::allocator<int> >’
as ‘this’ argument of ‘void std::vector<_Tp, _Alloc>::push_back(const _Tp&)
[with _Tp = int, _Alloc = std::allocator<int>]’ discards qualifiers
Je suis curieux de savoir pourquoi après le transfert de la propriété de ce vecteur, il ne peut plus être modifié?
Merci beaucoup!
Merci beaucoup! :) J'ai négligé le "const" dans closed_vec. – icephere
Il _does_ a quelque chose à voir avec auto_ptr. Avec des pointeurs réguliers, l'ancien pointeur non const peut toujours être utilisé pour modifier le conteneur. Le auto_ptr non const sera NULL après le transfert de propriété. – MSalters