2017-04-03 5 views
1

ma classe a une variable de membre d'instance publique de pointeur de fonction. (_ Base_func_ptr) dois-je initialiser '_base_func_ptr' dans le constructeur? ou simplement ignorer l'initialisation?C++ Dois-je initialiser la variable membre de l'instance publique dans le constructeur?

class base_cls { 
    public: 
    #ifdef WHICH_ONE_IS_CORRECT 

     base_cls():_base_func_ptr(nullptr), _some1(0), _some2(0) {} 

    #else ifdef INITIALIZE_ORDER_IS_REVERSE 

     base_cls():_some1(0), _some2(0), _base_func_ptr(nullptr) {} 

    #else ifdef JUST_SKIP_INITIALIZE_PUBLIC_MEMBER 

     base_cls():_some1(0), _some2(0){} 

    #endif 

     void (*_base_func_ptr)(void); 
    private: 
     int _some1; 
     int _some2; 
    }; 
+0

Fyi, l'ordre d'initialisation des membres est * toujours * l'ordre de déclaration dans la classe conteneur.La commande que vous fournissez dans la liste member-init ne fait aucune différence. En ce qui concerne * not * l'initialisation de votre membre func-ptr, pouvez-vous penser à une raison * non * pour? Y a-t-il * vraiment * un avantage à simplement le laisser se balancer avec une valeur indéterminée? – WhozCraig

Répondre

4

Vous n'avez pas ont pour l'initialiser dans le constructeur, mais vous devez l'initialiser avant la variable est utilisée. Sinon, votre programme aura un comportement indéfini.

+1

plus 1 pour être sur place. Ce n'est pas nécessaire. – 0xDEFACED