2017-04-03 3 views
1

私のクラスは関数ポインタpublicインスタンスメンバ変数を持っています(_ base_func_ptr) コンストラクタで '_base_func_ptr'を初期化する必要がありますか? をスキップするか、初期化をスキップするだけですか?C++コンストラクタでpublicインスタンスメンバー変数を初期化する必要がありますか?

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の場合、メンバーの初期化の順序は、常に*含まれているクラス内の宣言の順序です。member-initリストに指定した順序は違いはありません。あなたのメンバーfunc-ptrを初期化していない*について*あなたは理由*を*と考えることができますか?それは不確定な値でぶら下がっているだけのために、本当に*上にあるのでしょうか? – WhozCraig

答えて

4

あなたははコンストラクタでそれを初期化するを持っていませんが、変数が使用される前に、あなたはそれを初期化する必要があります。そうしないと、プログラムは未定義の動作をします。

+1

にスポットを当てるために1を加えたもの。それは必要ない。 – 0xDEFACED

関連する問題