Constructor Rule

가상 기반 클래스는 중간 클래스가 아니라 최종 파생 클래스가 초기화한다

`Printer`와 `Scanner`가 `Device(...)`를 적어도, 최종 객체 `Copier`를 만들 때는 `Copier`가 공유 Device의 생성자 인자를 결정합니다.

1. Device(42)
Copier가 공유 기반을 먼저 초기화
2. Printer(), Scanner()
중간 클래스 부분을 만든다
3. Copier()
최종 파생 클래스 멤버를 완성
위치 초기화 책임 왜 중요한가
Device 가상 기반이므로 객체 안에 한 번만 존재 id 같은 공유 상태가 두 개로 갈라지지 않는다.
Printer / Scanner 자기 멤버만 초기화 최종 객체 생성 시 Device 인자를 결정하지 못한다.
Copier Copier() : Device(42) 공유 기반 클래스의 실제 초기값을 최종적으로 정한다.