애초에 Customer의 기본생성자가 없으면 에러남
왜 why, 어찌됐든 PriorityCustomer의 복사 생성자 호출 전에 Customer의 생성자가 호출될 탠데, PriorityCustomer 복사 생성자의 맴버 초기화 리스트에 기본 클래스 생성자에 넘길 인자들도 명시되지 않음 => 기본 클래스의 기본 생성자를 호출해야 하는데, Custom 클래스에는 기본 생성자가 없다. => Error
그리고 기본 생성자를 만들어도 이 기본 생성자는 복사가 아닌, 기본적인 초기화를 해줄 것인데 의미가 있나(인자가 없으니 당연한 것임)
그래서 만들어주자
그냥 복사함수에서는 모든 부분을 복사하자!!!!!!
코드중복을 피하고 싶은 변태들은 복사 대입연산자에서 복사 생성자를 호출하는 그런 방법을 떠올리는데 말이 안된다. 이미 존재하는 객체를 내비두고 새로운 객체를 또 생성한다??
대충 이런식이면 되기야 하지만 에바임
대신 양쪽에서 겹치는 부분(복사 생성자, 복사 대입 연산자)을 별도의 맴버 함수(init과 같은 이름으로)에 분리해 놓은 후에 이 함수를 호출하게 만드는 것이다. 대게 이런 용도 함수는 private 맴버로 둔다.
생성자 혹은 소멸자가 여러 개 된다면 골치가 아파진다. 이 안에, 항목 9 참고
- 객체 복사 함수(복사 생성자, 복사 대입 연산자)는 주어진 객체의 모든 데이터 및 기본 클래스 부분을 빠트리 말고 복사해야 한다.
- 클래스의 복사 함수 두 개를 구현할 때, 한쪽을 이용해서 다른 쪽을 구현하려는 시도는 하지말자. 그 대신, 공통된 동작을 제 3의 함수(init())에다 분리해 놓고 양쪽에서 이것을 호출하게 만들어서 해결하자.
'Effective C++ > 2. 생성자, 소멸자 및 대입 연산자' 카테고리의 다른 글
항목 11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2021.04.24 |
---|---|
항목 10: 대입 연자는 *this의 참조자를 반환하게 하자 (0) | 2021.04.24 |
항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상함수를 호출하지 말자 (0) | 2021.04.24 |
항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 (0) | 2021.04.24 |
항목 7: 다형성을 가진 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 (0) | 2021.04.24 |