NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){
}
첫 번째 것은 이름 공간이고 두 번째 것은 함수 이름입니다. 그 세 가지 매개 변수는 무엇입니까? 상속과 관련이 있을지 모르지만 클래스 이름은 아닙니다. 그것들은 사적인 변수입니다.이 C++ 코드는 어떻게 해석합니까?
미리 감사드립니다.
NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){
}
첫 번째 것은 이름 공간이고 두 번째 것은 함수 이름입니다. 그 세 가지 매개 변수는 무엇입니까? 상속과 관련이 있을지 모르지만 클래스 이름은 아닙니다. 그것들은 사적인 변수입니다.이 C++ 코드는 어떻게 해석합니까?
미리 감사드립니다.
이것은 생성자의 정의입니다. 네임 스페이스가 없습니다.
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;
초기화는 생성자의 몸에 할당을보다 선호한다 몇 가지 이유 :
의 나머지 부분에서 초기화되지 않은 개체의 가능성을 제거한다.
NetworkManager 클래스의 생성자로 m_Thread, m_Continue, m_Init 멤버가 적어도 3 개 이상 있고 각각 값 0, True 및 False로 설정되어 있습니다.
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;
이를 사용하는 대신 생성자의 몸에 그 퍼팅의 장점은 무엇입니까? – codereviewanskquestions
@LCYSoft : 생성자 본문에 넣으면 멤버 변수가 기본값으로 초기화되고 값이 할당됩니다. 일부 데이터 유형의 경우, 이는 즉시 초기화하는 것보다 효율적이지 않습니다. 더 중요한 것은'ctor-initializer' 구문을 사용하여 초기화 할 필요가있는 몇 가지 데이터 유형이 있습니다 (예를 들어, 멤버 변수, const 멤버 등의 생성자에 인수를 전달해야 할 때) . –
정말 고마워요! – codereviewanskquestions