본문 바로가기

PL/C & C++

[C++] 생성자 콜론(:)

 

Foo(int num): bar(num) 은 초기화 리스트라고 하고, 멤버 변수 bar num으로 초기화하는 역할을 합니다.

 

그냥 생성자 함수{} 내에서 초기화하는 것과, 이렇게 초기화 리스트를 쓰 는것의 차이는

초기화 리스트에서 초기화를 하는 경우, 생성자가 호출될 때 객체의 생성과 초기화가 한 번에 이루어집니다.

 

생성자 함수 내{}에서 초기화를 하는 경우, 객체가 생성되어, default생성자로 초기화된 상태에서 다시 한 번 할당받게 하게 됩니다. 이 경우엔 default할당-유저할당의 2단계를 거치게 돼서 오버헤드가 생깁니다.

 

 

초기화 리스트를 써야만 하는 상황은 크게 다음과 같습니다

  • 클래스가 레퍼런스를 멤버로 가질 때
  • non static const멤버가 있을 때
  • default 생성자가 없을 때
  • base class를 초기화할 때
  • 생성자 파라미터의 이름이 데이터 멤버랑 같을 때(이 경우는 this를 써서 해결할 수도 있습니다)

 

 

 

 

 

 

생성자에서 콜론(:)은 왜 쓰는 건가요?

이런 코드를 봤는데 소스 코드 #include <iostream> class Foo { public: int bar; Foo(int num): bar(num) {}; }; int main(void) { std::cout << Foo(42).bar << std::endl; return 0; } 여기서 : bar(num)처럼 쓰는건 뭔가요?저

hashcode.co.kr

 

'PL > C & C++' 카테고리의 다른 글

[C++] 상속  (0) 2021.01.27
[C++] 소멸자(destructor)  (0) 2021.01.27
[C++] 함수 객체  (0) 2021.01.26
[C++] 참조 사이트  (0) 2021.01.20
[C & C++] macro function, inline function  (0) 2021.01.20