: 해당 함수를 제공하지 않는 키워드
c++은 c로부터 물려받은 안좋은 특징이 있다.
함수의 인자가 다르더라도 묵시적으로 변환하여 데이터 손실을 발생시킨다는 점이다.
묵시적 변환을 차단하는 delete 키워드를 알아보자.
- 암시적 형변환을 차단함.
- 복사 생성, 복사 대입 디폴트로 만드는 것을 차단함.
240802 추가. -> 위 코드를 보면 생각할 수 있는데 int 타입인 foo 함수도 있어서 암묵적 형변환 처리하면 문제 없이 진행될텐데, 굳이 원래 타입인 double을 선택하고 있다는 것이다.
즉 컴파일러는 원본타입에 맞는 함수 존재할 경우, 그것만 쫓는다는 것을 확인할 수 있다.
템플릿 단계에서 특정 타입 사용을 차단하고 싶을때
: 유저가 생성자 함수를 구현하지 않아도, 컴파일러에게 기본 생성자를 만들어 달라하는 함수..
컴파일러가 제공하는 생성자. 를 사용하겠다.
: Point() = default;
유저가 만드는 디폴트 생성자.
: Point() {};
유저 구현 깡통 생성자와 디폴드 생성자의 차이.
객체 초기화할때 Point p{}; 이렇게 작성해야 확인이 가능함.
1.default 선언할 경우, 그리고 객체 생성 어떻게 하는지도 보자.
2.유저가 정의한 빈 깡통 생성자의 경우, 객체
-> 결론
: 유저가 객체의 멤버들을 직접적으로 초기화할 필요 없다면, default 선언하자.
그리고, 객체 생성은 중괄호로 진행하자. {}
: 코드 만들어서 확인하라.
Point 클래스를 만들고, 멤버 데이터 x,y넣고, 유저 구현 깡통 생성자 , 디폴트 생성자를
만들어서 print 호출하자.
-> Point p가 아니라 Point p{} 이렇게 작성하자.
1번) 유저 정의 깡통 생성자.
: 유저가 직접 초기화를 해야 함.
-> 멤버들이 쓰레기 값, 즉 초기화가 이루어지지 않았다.
2번) 컴파일러 디폴트
: 0으로 초기화됨.
초기화 Point p{} 에 대해서는 추후에 설명할 것임.