Je lis here à propos std :: auto_ptr <> :: operator =devrait std :: auto_ptr <> :: operator = réinitialiser/désallouer sa pointee existante?
Avis cependant que le côté gauche objet est pas automatiquement désallouée quand il fait déjà un objet. Vous pouvez explicitement faire en appelant la fonction membre réinitialiser avant de lui affecter une nouvelle valeur.
Cependant, quand je lis le code source pour le fichier d'en-tête C:\Program Files\Microsoft Visual Studio 8\VC\ce\include\memory
template<class _Other>
auto_ptr<_Ty>& operator=(auto_ptr<_Other>& _Right) _THROW0()
{ // assign compatible _Right (assume pointer)
reset(_Right.release());
return (*this);
}
auto_ptr<_Ty>& operator=(auto_ptr<_Ty>& _Right) _THROW0()
{ // assign compatible _Right (assume pointer)
reset(_Right.release());
return (*this);
}
auto_ptr<_Ty>& operator=(auto_ptr_ref<_Ty> _Right) _THROW0()
{ // assign compatible _Right._Ref (assume pointer)
_Ty **_Pptr = (_Ty **)_Right._Ref;
_Ty *_Ptr = *_Pptr;
*_Pptr = 0; // release old
reset(_Ptr); // set new
return (*this);
}
Quel est le comportement correct/standard? Comment se comportent les autres implémentations STL? Si le site Web mentionné ci-dessus contient des informations erronées/périmées, quel site recommandez-vous comme référence?
Je prédis que vous obtiendrez au moins 3 réponses vous avertissant de ne pas utiliser auto_ptr. Je voudrais avoir la norme à portée de main, afin que je puisse vérifier votre référence. –
Je ne vais pas mettre une réponse, mais je vais ajouter ce * commentaire * que vous ne devriez pas utiliser 'auto_ptr'. Utilisez 'boost :: scoped_ptr' ou' boost :: shared_ptr' à la place. – rlbond
En tant que FYI, j'ai soumis un rapport d'erreur sur cplusplus.com. Je ne sais pas s'ils corrigent activement les erreurs de contenu. –