L'initialisation de la carte et de définir des variables de membre de classe à vide en C++?
J'ai une classe C++ avec deux variables de membre
std::map<int, Node*> a;
et
std::set<Node*> b;
Un correcteur de style utilisée dans mon Université exige que toutes les variables de membre pour être initialisé dans le constructeur de la classe. Comment ces variables de membre a
et b
être initialisée à vide dans le constructeur de la classe qu'ils fréquentent?
- Vous ai commenté deux réponses avec "ça fonctionne, merci". Vous devriez maintenant accepter une (dans le cas de réponses identiques, en général le premier). 😉
Vous devez vous connecter pour publier un commentaire.
Comme ceci:
Comme ce
SomeClass::SomeClass() : a(), b() {}
?Que les deux
std::set
etstd::map
ont "utilisateur"-a déclaré constructeurs par défaut ils seront initialisés implicitement cependant vous construisez votre classe. Vous n'avez pas à faire quelque chose de spécial pour se conformer avec le "style" de guide.new
mot-clé. Ce n'est pas le cas en C++?Ce contrôle est effectué par le compilateur g++, lorsque l'-Weffc++ avertissement option est appliquée.
Voir le Point 4 ("assurez-vous que les objets sont initialisés avant qu'ils ne soient utilisés"
dans Scott Meyers, Efficace, C++, Livre pour plus d'informations,
pourquoi il pourrait être raisonnable d'initialiser tous les membres à l'aide de la liste d'initialisation de membre.
Fondamentalement, il propose pour ce faire de manière cohérente et préfère ce sur les affectations à l'intérieur
constructeur de corps.