코딩 규칙 - 암시적 형변환을 거부하는 explicit 생성자.

보물창고·2022년 8월 16일
0

c++ basic 코드누리

목록 보기
27/50
post-custom-banner

업데이트 240821

  • 나는 생성자 작성시 암시적 변환을 차단하기 위해서 그냥 explicit을
    작성하자.

개념

: 직접 초기화만 가능하게 하는 생성자 .

problem

: 인자가 있는 객체를 만들어서 ,
생성자(인자) call하는 형식이 아닌,
인자를 대입해보자.

ex) CObject obj = 4;

-> 가능한 구조임.
0) 복사 초기화를 해보아라 -> 객체 명 = 인자 타입에 맞는 리터럴 상수
가) explicit 키워드를 사용해 , 직접초기화만 가능한지 확인하라.
나) explicit 키워드를 지우고,
foo(CObject _obj) 함수를 만들고, foo( 4 ); 가능한지 확인하라.
다) foo( 미리 생성된 객체를 넣어보자. )
-> 이때는 복사 생성자가 호출됨을 확인할 수 있음.

특징

  • 생성자 뿐 아니라 복사 생성자에다가 붙일수 잇음.
  • 함수의 인자가 객체일 경우에 복사 생성자가 call됨

결론
: 컴파일러는 암시적으로 복사 초기화를 가능케함.
explicit 키워드를 사용하면 , 암묵적인 복사 초기화를 방지함 .

c++에서의 explicit 생성자

  • string 은 복사 초기화를 허용함.
string s = "hello world"
  • vector는 explicit 생성자로 되어 있어 복사 초기화 불가함.
vector<int> v = 4; // error
  • 스마트 포인터의 경우도 복사 초기화 불가함.
shared_ptr<int> p = new int; // error;

problem

: 위의 3개를 만들어서 확인해보아라.

profile
🔥🔥🔥
post-custom-banner

0개의 댓글