2011-06-13 9 views
1
NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){ 
} 

첫 번째 것은 이름 공간이고 두 번째 것은 함수 이름입니다. 그 세 가지 매개 변수는 무엇입니까? 상속과 관련이 있을지 모르지만 클래스 이름은 아닙니다. 그것들은 사적인 변수입니다.이 C++ 코드는 어떻게 해석합니까?

미리 감사드립니다.

답변

12

이것은 생성자의 정의입니다. 네임 스페이스가 없습니다.

NetworkManager :: NetworkManager() : m_Thread(0), m_Continue(true), m_Init(false){ 
} 

생성자는 NetworkManager라는 클래스 용이며 초기화 목록을 사용하여 멤버를 초기화합니다. 무슨 일 것은 (완전히 정확하지 않을 경우) 개념이다 :

그런 다음 완전히 초기화 객체 생성하기 위해 생성자를 사용

NetworkManager :: NetworkManager() { 
     create "empty" NetWorkManager object 
     initialise its m_Thread with zero 
     set its m_Continue to be true 
     set its m_Init to be false 
} 
이 같은

NetworkManager manager; 

초기화는 생성자의 몸에 할당을보다 선호한다 몇 가지 이유 :

  • 많은 유형은 일반적으로 더 효율적인 할당을
  • 을 지원하지 않습니다
  • 그것은 몸 실행 전에 (기본 클래스 생성자 또는 호출) 필드를 설정 부재 초기화 구문을 사용하여 클래스 생성자의 생성자 코드
+1

이를 사용하는 대신 생성자의 몸에 그 퍼팅의 장점은 무엇입니까? – codereviewanskquestions

+3

@LCYSoft : 생성자 본문에 넣으면 멤버 변수가 기본값으로 초기화되고 값이 할당됩니다. 일부 데이터 유형의 경우, 이는 즉시 초기화하는 것보다 효율적이지 않습니다. 더 중요한 것은'ctor-initializer' 구문을 사용하여 초기화 할 필요가있는 몇 가지 데이터 유형이 있습니다 (예를 들어, 멤버 변수, const 멤버 등의 생성자에 인수를 전달해야 할 때) . –

+0

정말 고마워요! – codereviewanskquestions

1

의 나머지 부분에서 초기화되지 않은 개체의 가능성을 제거한다.

1

NetworkManager 클래스의 생성자로 m_Thread, m_Continue, m_Init 멤버가 적어도 3 개 이상 있고 각각 값 0, True 및 False로 설정되어 있습니다.

3
NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){ } 

이 코드는 Initializer Lists라는 C++ 기능을 사용합니다. NetworkManager 생성자가 호출되기 전에 클래스 NetworkManager의 멤버를 초기화합니다.

그것은 단순히 수행합니다

m_Thread = 0; 
m_Continue = true; 
m_Init = false; 
관련 문제