Je pensais qu'en théorie la réponse à cette question était oui.
Cependant, en pratique, mon compilateur (VS2010) ne semble pas se plaindre dans la situation suivante: j'ai une classe de base abstraite fournissant une interface commune (mais n'ayant pas de données membres) et diverses sous et sous-sous-classes qui en dérivent.
class Base
{
public:
Base() {}
virtual ~Base() {}
virtual void interfaceFunction1() = 0;
virtual void interfaceFunction2() = 0;
private:
Base(const Base&); // all derived classes should be uncopyable
Base& operator=(const Base&);
// no data members
};
Mon compilateur a trouvé qu'il n'était même pas problématique d'implémenter des constructeurs de copie complète dans des sous ou sous-sous-classes.
Comment puis-je m'assurer que chaque classe dérivée de Base est non copiable?
edit: Si je comprends bien, c'est exactement ce que Scott Meyers a expliqué au point 6 de Effective C ++ (3e édition, 2005) avec son idée de la classe Uncopyable
(seulement étendue ici à une classe d'interface complète). Quelle est la différence qui fait que son idée fonctionne? (Je sais qu'il hérite en privé, mais cela ne devrait pas poser de problème)
Cela devrait empêcher le compilateur de générer un constructeur de copie pour les classes dérivées qui n'en déclarent pas un explicitement. Cependant, rien n'empêche une classe dérivée de déclarer explicitement un constructeur de copie qui fera autre chose que d'appeler le constructeur de copie de Base
.
Il n'y a aucun moyen de s'assurer que les classes dérivées sont instanciables mais non copiables.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots