C + +我必须在构造函数中初始化公共实例成员变量?

问题描述:

我的类有函数指针公共实例成员变量。(_ base_func_ptr) 我是否必须在构造函数中初始化'_base_func_ptr'? 或只是跳过初始化?C + +我必须在构造函数中初始化公共实例成员变量?

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,成员初始化的顺序是* always *包含类中的声明顺序。您在成员init列表中提供的顺序没有区别。关于*不*初始化你的成员func-ptr,你能想到一个原因*不是*有没有真正的好处,只是让它悬在一个不确定的价值上? – WhozCraig

你不在构造函数初始化,但在使用变量之前,必须对其进行初始化。否则,你的程序将会有未定义的行为。

+1

加上1作为点。没有必要。 – 0xDEFACED