Une classe dérivée peut-elle être rendue non copiable en déclarant le constructeur / opérateur de copie privé dans la classe de base?

mr_T

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)

Angew n'est plus fier de SO

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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Comment exécuter un fichier python avec des droits d'administrateur dans pycharm

  2. 2

    comment obtenir un objet de requête dans les tests unitaires de django?

  3. 3

    mongo kafka connect source

  4. 4

    Vérifier la longueur du nombre à partir du message, puis utiliser la valeur dans l'instruction

  5. 5

    comment convertir une chaîne en un tuple dateutil jour de la semaine sans utiliser eval

  6. 6

    Comment ajouter un texte dans un texte Python/Tkinter

  7. 7

    Aide de variable de débogage pprint jinja2

  8. 8

    Dans les modèles Hugo, comment vérifier la longueur du tableau de fichiers JSON?

  9. 9

    Impression de la longueur du chemin le plus court dans le labyrinthe

  10. 10

    Exécuter la requête externe pour chaque date obtenue à partir de la requête interne

  11. 11

    Recherche de dicton Jinja2 à l'aide d'une clé variable

  12. 12

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  13. 13

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  14. 14

    définir une propriété pour chaque nœud dans neo4j

  15. 15

    Pourquoi cette requête Java échoue-t-elle? renvoyer 0 quand il y a des résultats

  16. 16

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  17. 17

    Laravel 8: Attempt to read property "id" on null

  18. 18

    Comment obtenir tous les champs d'un objet (y compris sa superclasse), à l'aide de l'API Mirrors de Dart?

  19. 19

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  20. 20

    Microsoft.WebApplication.targets

  21. 21

    obtenir le nombre de marqueur affiché sur la carte

chaudétiquette

Archive