[Effective C++] 15. 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자

C++/Effective C++

2020. 8. 3. 21:15

1. 명시적 변환, 암시적 변환

스마트 포인터는 멤버 함수 get()을 통해 실제 포인터를 제공할 수 있다. 그리고, 포인터 역참조 연산자(operator->, operator*)도 오버로딩하고 있다.

 

암시적 변환보다는 get 등의 명시적 변환 함수를 제공하는 쪽이 일반적으로 낫다. 하지만 고객 편의성을 위해 암시적 변환을 제공하는 곳도 있다.

 

이것만은 잊지 말자!

  • 실제 자원을 직접 접근해야 하는 기존 API들도 많기 때문에, RAII 클래스를 만들 때는 그 클래스가 관리하는 자원을 얻을 수 있는 방법을 열어 주어야 합니다.
  • 자원 접근은 명시적 변환 혹은 암시적 변환을 통해 가능합니다. 안전성만 따지면 명시적 변환이 대체적으로 더 낫지만, 고객 편의성을 놓고 보면 암시적 변환이 괜찮습니다.