OK, donc je suis tous vendu sur le copy-and-swap idiom et je pense que je sais surtout comment l'implémenter.Comment échanger un CString MFC?
Cependant, ou codebase utilise MFC's CString class comme chaîne et cela ne va pas changer.
Depuis swap
doit (devrait ???) être nothrow, je ne peux pas faire
std::swap(this->my_cstring, rhs.my_cstring);
car cela créera un objet CString temporaire qui peut jeter. (Plus son inefficace.)
Alors où me reste-t-il? Dois-je ajouter un try-catch? Devrais-je permettre cette condition de mémoire (extrêmement rare) pour déclencher une exception et faire échouer l'échange?
Regarder la mise en œuvre de CStrings, il ne semble pas qu'il y ait un membre ou une fonction qui permet d'échanger ...
Je ne vois pas de raison de coder défensivement pour mémoire insuffisante. Traiter de cela dans votre échange CString signifie simplement qu'il apparaîtra ailleurs, n'est-ce pas? –
@Aidan: Qu'entendez-vous par "traiter avec". Vous ne pouvez simplement pas échanger un 'CString' d'une manière 100% exceptionnelle. –
Désolé, je voulais dire, si la seule chose que votre tentative/catch autour du swap pourrait rencontrer est la mémoire insuffisante, il ne devrait pas y avoir d'essai/catch parce que la mémoire insuffisante ne fera que vous planter ailleurs de toute façon. –