resource ownership

리소스를 직접 소유하면 복사, 이동, 소멸 정책을 함께 정해야 한다

Rule of Three/Five/Zero는 특수 멤버 함수를 외우는 규칙이 아니라 소유권을 어디에 둘지 결정하는 수명 주기 설계 기준이다.

Rule of Three, Five, Zero 선택 기준
상황 필요한 정책 놓치면 생기는 문제 권장 방향
직접 소유 없음 컴파일러 기본 특수 멤버를 사용한다. 불필요한 직접 정의가 이동 최적화를 막을 수 있다. Rule of Zero를 우선 선택한다.
소멸자 직접 정의 복사 생성자와 복사 대입도 함께 검토한다. 포인터 값만 복사되어 이중 해제나 누수가 생긴다. Rule of Three 기준으로 한 묶음으로 본다.
이동 가능한 소유권 이동 생성자와 이동 대입까지 정의한다. 임시 객체 복사 비용이 커지고 원본 상태가 불명확해진다. Rule of Five로 이전 후 원본을 안전한 상태로 둔다.
스마트 포인터 사용 std::unique_ptr, 컨테이너에 소유권을 맡긴다. 수동 new/delete가 클래스 전체 책임으로 번진다. 직접 소멸자를 없애 Rule of Zero로 되돌린다.
판단 순서

소유한 자원이 있는지 먼저 보고, 직접 소유한다면 복사와 이동까지 함께 닫는다. 가능하면 소유권 타입에 위임해서 특수 멤버 함수를 직접 쓰지 않는다.