3 votes

Quels sont les cas d'utilisation de booster::noncopyable ?

Tout d'abord, s'agit-il de boost::noncopyable ou de booster::noncopyable. J'ai vu les deux à différents endroits.

Pourquoi voudrait-on rendre une classe non copiable ? Pouvez-vous donner des exemples d'utilisation ?

5voto

the_mandrill Points 12530

Je le trouve utile lorsque vous avez une classe qui a un pointeur comme variable membre que cette classe possède (c'est-à-dire qu'elle est responsable de la destruction). A moins que vous n'utilisiez shared_ptr<> ou tout autre pointeur intelligent comptabilisé par référence, vous ne pouvez pas copier ou assigner la classe en toute sécurité, car dans le destructeur, vous voudrez delete le pointeur. Cependant, vous ne savez pas si une copie de la classe a été prise et vous obtiendrez donc une double suppression ou une violation d'accès en déréférençant un pointeur libéré.

Si vous héritez de noncopyable elle présente alors deux avantages :

  • Il empêche la classe d'être copiée ou assignée
  • L'intention est claire à la lecture de la définition de la classe, c'est-à-dire que le code est auto-documenté.

eg

class MyClass : boost::noncopyable
{ 
   ...
};

3voto

jdehaan Points 14019

La bonne dans le cas de boost es boost::noncopyable .

Il est utilisé pour empêcher la copie d'objets comme le nom l'indique. Il prend tout son sens lorsque la copie conduit à une situation très difficile à gérer. Un exemple est une classe enveloppant le concept de poignée de fichier ou de connexion réseau, comme indiqué dans la section la documentation . Les problèmes surviennent lors de la libération/fermeture de la ressource ou du fichier. Si vous avez plusieurs copies de ces ressources ou de ces fichiers, comment allez-vous procéder ? Vous pourriez utiliser un système de comptage de références, mais il est difficile de le gérer correctement si vous déballez les poignées à certains endroits...

Personnellement, je trouve son utilisation la plus claire et la plus utile dans la mise en œuvre d'un modèle de singleton, où vous voulez vraiment n'avoir qu'une seule instance, qui dans ce cas ne doit évidemment pas être copiable. Les singletons garantissent qu'une seule instance d'une classe peut être créée pour contenir certaines ressources globales, par exemple une configuration système.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X