프로그래밍/C++

#43. 초기화 리스트

코딩하는상후니 2022. 7. 20. 22:01

 

*초기화를 왜 해야할까 ??
=> 버그 예방 중요
=> 포인터 등 주소값이 연루되어 있을 경우
 
Knight k;
cout << k._hp << endl;
if(k._hp == 0) cout << "Die" << endl;
=> _hp 값이 초기화 안되어 있으면 ??

 

 


 

 

*초기화 방법
 
1. 생성자 내에서
 
 
2. 초기화 리스트
: _hp(100)
=> 이 과정은 '선처리 영역' 에서 처리.
=> 상속 관계에서 원하는 부모 생성자를 필요로 할 때.
 
 
*C++11 문법 => 멤버변수 선언 시, 바로 초기화
int _hp = 100;
 
 
 
*생성자 내 vs 초기화리스트
=> 일반 변수는 차이 없음.
=> 멤버 타입이 클래스인 경우 차이.
 
public:
int _hp;
Inventory _inventory;
 
=> 이 경우, _inventory 가 선처리 영역에서 같이 만들어지게 됨.
이 때, Inventory 생성자 호출
 
만약 다른 생성자 호출을 생성자 내에서 하게 된다면,

 

위 그림처럼,
call Inventory (0B512D0h)
call inventory::Inventory (0B51366h )
즉, 생성자가 두 번 호출되게 됨.
 
따라서, 클래스 타입의 멤버 변수를 다른 버전의 생성자로 호출하고 싶다면,
초기화 리스트를 사용해 생성자는 한 번 호출 하는 것이 더 '효율적' 이다.
 
 

 
본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다.
 

'프로그래밍 > C++' 카테고리의 다른 글

#45. 동적할당  (0) 2022.07.20
#44. 연산자 오버로딩  (0) 2022.07.20
#42. 다형성 virtual  (0) 2022.07.19
#41. 은닉성  (0) 2022.07.19
#40. 상속성  (0) 2022.07.19