*초기화를 왜 해야할까 ??
=> 버그 예방 중요
=> 포인터 등 주소값이 연루되어 있을 경우
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 |