Certains objets représentent des entités qui ne peuvent pas ou ne devraient pas être copié. Par exemple, vous pouvez empêcher la copie d'un objet qui représente le fichier journal utilisé par une application, correspondant à l'attente qu'un seul fichier journal sera utilisé par toutes les parties du code. L'utilisation d'un accidentellement ou de manière inappropriée objet copié pourrait conduire à de contenu apparaissant dans le journal, l'inexactitude des enregistrements de journal en cours de taille, de multiples tentatives (échec) à "rouler" vers un nouveau nom de fichier journal ou renommer l'existant.
Une autre utilisation est de faire respecter la copie via une fonction virtuelle. Que les constructeurs ne peuvent pas être virtual
, une pratique courante est d'empêcher l'accès direct au constructeur de copie et de fournir un virtual Base* clone()
méthode qui retourne une copie du type à l'exécution à laquelle un pointeur de points. Cela empêche l'accidentel, le découpage qu' Base b(derived)
présentent.
Un autre exemple: un mort-simple pointeur intelligent objet qui supprime simplement le pointeur de la donnée dans le constructeur: si elle ne prend pas en charge le comptage de référence ou une autre manière de gérer plusieurs propriétaires, et ne veut pas avoir de risque maladroit involontaire std::auto_ptr
style de transfert de propriété, puis il suffit de cacher le constructeur de copie donne un super petit pointeur intelligent, rapide et efficace pour le nombre limité de cas où il est utilisable. Une erreur de compilation à propos de la tentative de copie, il serait effectivement demander au programmeur "hé - si vous voulez vraiment faire me changer pour un pointeur partagé, sinon dégage!".