스토리텔링 개발자

[Effective C++] 15. 자원 관리 클래스 get 함수 제공하기 본문

개발/Effective C++

[Effective C++] 15. 자원 관리 클래스 get 함수 제공하기

김디트 2024. 6. 5. 10:26
728x90

항목 15. 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자.

 

 

 

  • 제대로 만들어진 스마트 포인터 클래스는 거의 모두 포인터 역참조 연산자도 오버로딩하고 있어서 사용 시의 편의를 제공한다.
    • T* operator->() const
    • T& operator*() const
  • 그럼에도 RAII 클래스의 객체를 실제 자원으로 변환해야 할 때가 있다.
    • 기존에 쓰이던 API에서 자원을 직접 참조하게 만들어져 있는 경우가 잦기 때문 

 

 

 

변환 방법
  1. 명시적 변환
    • 멤버 함수 제공.
    • class Font
      {
      public:
          ...
          FontHandle get() const { return f; } // 명시적 변환 함수
          ...
      }
    • 사용자가 하부 수준 API를 쓰고 싶을 때마다 get을 호출해야 하는 번거로움이 있다.
  2. 암시적 변환
    • 변환 연산자를 구현.
    • class Font
      {
      public:
          ...
          operator FontHandle() const { return f; } // 암시적 변환 함수
          ...
      };
    • 자원관리 클래스를 쓰려 한 부분에서 원하지 않는 타입 변환이 일어날 염려가 있다.

 

 

 

  • 대부분의 경우 문제가 발생했을 때 한 눈에 알아볼 수 있는 명시적 변환이 나을 때가 많다.
728x90
Comments