2010-12-03 52 views
6

J'ai une classe C++ avec deux variables membresInitialisation de la carte et définition des variables membres de la classe à vider en C++?

std::map<int, Node*> a; 

et

std::set<Node*> b; 

Un correcteur de style utilisé à mon université exige que toutes les variables membres à initialiser dans le constructeur de la classe. Comment ces variables membres a et b peuvent-elles être initialisées pour être vides dans le constructeur de la classe dans laquelle elles se trouvent?

+0

Vous avez commenté deux réponses avec "cela fonctionne, merci". Vous devriez maintenant en accepter un (en cas de réponses identiques, généralement le premier). ;) – Mephane

Répondre

11

Comme ceci:

class A 
{ 
    public : 

    A() : s(), 
     m() 
    { 
    } 


    std::set<int> s; 
    std::map< int, double > m; 
}; 
+0

Cela fonctionne, merci! –

2

Comme cela SomeClass::SomeClass() : a(), b() {}?

+0

Cela fonctionne, merci! –

2

Comme les deux std::set et std::map ont « utilisateur » des constructeurs par défaut -declared ils seront initialisés implicitement mais vous construisez votre classe. Vous n'avez rien de spécial à faire pour vous conformer au guide "style".

+0

Merci Charles. Le problème ici était que la vérification de style est faite automatiquement dans le cadre d'un système de notation automatique et nécessite que toutes les variables membres soient explicitement initialisées. –

+0

@Marek Miettinen: Êtes-vous sûr que la vérification de style ne s'applique pas seulement aux types de POD? Je n'ai jamais vu un guide de style insister sur l'initialisation explicite des choses qui ont des constructeurs par défaut qui seraient utilisés pour l'initialisation implicite dans tous les cas. –

+0

Et si le vérificateur de style l'exige vraiment, il est cassé, aussi simple que cela. – etarion

0

Cette vérification est effectuée par le compilateur g ++ lorsque l'option d'avertissement -WeffC++ est appliquée. Voir le point 4 ("Assurez-vous que les objets sont initialisés avant leur utilisation" dans Scott Meyers, Effective C++, Book pour plus d'informations, pourquoi il peut être raisonnable d'initialiser tous les membres à l'aide de la liste d'initialisation de membre suggère de faire ceci de manière cohérente et préférez ce sur les affectations à l'intérieur

+0

Comment cela explique-t-il comment le faire? La référence Effective C++ est un bon matériel de recherche, mais pas tout à fait une réponse. – ssube

+0

@peachykeen: Vous avez raison, c'est plutôt un commentaire, qu'une réponse à la question initiale. –