web-dev-qa-db-fra.com

Existe-t-il un std :: noncopyable (ou équivalent)?

Il y a boost :: noncopyable et j'ai ma propre classe non copiable dans ma bibliothèque. Existe-t-il un std :: non copiable ou équivalent renversant dans la dernière norme C++?

C'est une petite chose mais dériver d'une telle classe rend l'intention beaucoup plus claire.

22
Robinson

Non, car il existe un moyen standard de rendre une classe non copiable:

class MyClass
{
   MyClass(const MyClass&) = delete;
   MyClass& operator=(const MyClass&) = delete;
}:

Une classe qui n'est pas copiable peut cependant être rendue mobile en surchargeant un constructeur de MyClass&&.

La déclaration pour rendre la classe non copiable (ci-dessus) peut être dans la section publique ou privée.

19
CashCow

Je suis sûr que vous l'avez déjà compris en lisant le post de CashCow, mais j'ai pensé que je pourrais aussi bien fournir une classe de base pour les classes non copiables.

class Noncopyable {
public:
    Noncopyable() = default;
    ~Noncopyable() = default;

private:
    Noncopyable(const Noncopyable&) = delete;
    Noncopyable& operator=(const Noncopyable&) = delete;
};
14
user2015735