web-dev-qa-db-fra.com

Comment supprimer le constructeur par défaut?

Parfois, je ne souhaite pas fournir de constructeur par défaut, ni le compilateur fournir un constructeur par défaut pour ma classe. En C++ 11, je peux faire des choses comme:

class MyClass 
{ 
  public: 
    MyClass() = delete; 
};

Mais actuellement, mon conférencier ne me permet pas de le faire dans le cadre de mon travail. La question qui se pose est la suivante: avant C++ 11, existe-t-il un moyen de demander au compilateur de s’arrêter implicitement de fournir un constructeur par défaut?

33
カオナシ

Je dirais que le rendre privé .. quelque chose comme

class MyClass
{
private:
    MyClass();
}

et personne (de l'extérieur de la classe elle-même ou des classes d'amis) ne pourra appeler le constructeur par défaut. De plus, vous aurez trois options pour utiliser la classe: soit fournir un constructeur paramétré, soit l’utiliser comme classe utilitaire (une classe avec uniquement des fonctions statiques) ou créer une fabrique pour ce type dans une classe amie.

42
vidit

Sûr. Définissez votre propre constructeur, par défaut ou non.

Vous pouvez également le déclarer privé afin qu'il soit impossible d'appeler. Malheureusement, cela rendrait votre classe complètement inutilisable, à moins que vous ne fournissiez une fonction statique pour l'appeler.

13
Crazy Eddie

Outre la déclaration du constructeur privé par défaut, vous pouvez également lever une exception lorsque quelqu'un tente de l'appeler. 

class MyClass
{
  private:
    MyClass() 
    {
      throw [some exception];
    };
}
0
Simon Oelmann