2017-04-03 34 views
1

我的類有函數指針公共實例成員變量。(_ 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

回答

4

你不在構造函數初始化,但在使用變量之前,必須對其進行初始化。否則,你的程序將會有未定義的行爲。

+1

加上1作爲點。沒有必要。 – 0xDEFACED

相關問題