Comment interdire l'utilisation du constructeur par défaut en C ++?
Je ne veux pas la rendre possible dans mon programme pour créer un objet sans passer des arguments au constructeur.
Est-il un moyen?
source d'informationauteur Debugger | 2011-11-09
Vous devez vous connecter pour publier un commentaire.
Lorsque vous déclarez n'importe quel autre constructeur, le compilateur ne génère pas de constructeur par défaut pour vous. Si vous avez spécifié un défaut constructeur sans argument, vous pouvez le rendre privé.
Rappelez-vous que le compilateur peut générer automatiquement chacun de ces 4 fonctions membres d'une classe.
Mais il ne générera pas un défaut, si vous avez déclaré vous-même, c'est à dire, si vous avez déclaré un constructeur vous-même, il ne crée pas le constructeur par défaut. Si vous ne déclarez pas l'un de l'autre 3 toutefois, le compilateur peut générer.
edit: Notez que cette information s'applique à C++03, mais il est différent en C++11 M. Matthieu mentionne dans les commentaires.
Tandis que les autres réponses sont vraies, il y a une nouvelle technique en C++11 pour exprimer que : supprimé constructeur par défaut
Il permet interdisant une fonction sans fonction sur un autre truc. Il a également exprimer clairement votre intention dans le code.
Définir un constructeur prenant le bon argument(s). Cela permettra d'éviter le compilateur à partir de la définition d'un constructeur par défaut.
La raison pour laquelle vous pouvez créer un objet sans passer des arguments au constructeur, c'est que vous avez un constructeur par défaut. Un constructeur par défaut est une sorte de constructeur qui n'a pas de paramètre ou de tous les paramètres ayant des valeurs par défaut. Et si vous ne déclarez pas de tout constructeur, le compilateur va en faire un pour vous.
Donc, la solution est très facile. Vous pouvez déclarer un constructeur avec un paramètre sans valeur par défaut, alors que le compilateur n'est pas la peine de faire le constructeur.
la création d'une non constructeur vide "annule" le vide de constructeur par défaut, donc si vous n'avez pas explicitement également créer un constructeur vide, pas d'objets seront créés sans donner d'arguments.
Créer un privé de constructeur par défaut.