[ Effective C++ ] 정리 모음집
" C++ 프로그래머의 필독서, 스콧 마이어스의 Effective C++ 를 읽고 내용 요약 / 정리 "
" RAII 클래스는 애초에 데이터 은닉이 목적이 아니므로 자원 관리만 실수 없이 이루어진다면 OK! "
- 실제 자원을 직접 접근해야 하는 기존 API들도 많기 때문에, RAII 클래스를 직접 만들 때는 관리하는 자원을 얻을 수 있게 방법을 구현 하자!
- 자원 접근은 명시적·암시적 변환을 통해 가능! 안전성만 따지면 명시적 변환이 대체적으로 더 낫지만, 고객 편의성을 놓고 보면 암시적 변환도 괜찮음!
[직접 참조 코드]
shared_ptr<Investment>pInv(createInvestment());
int daysHeld(const Investment *pi);
int days = daysHeld(pInv); // 에러!
📢 위 문제는 auto_ptr, shared_ptr과 같은 RAII 클래스는 명시적, 암시적 변환으로 해결 가능!
int days = daysHeld(pInv.get());
[암시적 변환 코드]
class Investment
{
public:
bool isTaxFree() const;
...
};
Investment* createInvestment();
shared_ptr<Investment>pi1(createInvestment());
bool taxable1 = !(pi1->isTaxFree()); // operator-> 이용
auto_ptr<Investment>pi2(createInvestment());
bool taxable2 = !((*pi2).isTaxFree()); // operator* 이용