2017-04-03 2 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, 멤버 초기화 순서는 항상 포함하는 클래스의 선언 순서입니다. 멤버 초기화 목록에 입력 한 순서는 아무런 차이가 없습니다. 멤버 func-ptr을 초기화하지 않는 것에 대해, * 아닌 * 이유를 생각해 볼 수 있습니까? 불확실한 가치로 매달려 버리는 것만으로도 정말 거꾸로 있습니까? – WhozCraig

답변

4

하지 는 생성자에서 초기화 할을 가지고 있지만 변수가 사용되기 전에 초기화해야합니다. 그렇지 않으면 프로그램에 정의되지 않은 동작이 발생합니다.

+1

에 1을 더한 것. 꼭 필요한 것은 아닙니다. – 0xDEFACED

관련 문제