RAII 2

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

1. 개요자원 관리 클래스는 메모리 누수를 막는 아주 훌륭한 방법입니다. 그러나 우리는 종종 자원 관리 객체의 보호벽을 넘어서 실제 자원을 직접 만져야 할 일이 종종 생길것입니다. std::tr1::shared_ptr yptr(createYeoul());int YeoulAge(const Yeoul* ptr);int age = YeoulAge(yptr); // 에러 만약 코드를 이렇게 작성한다면 오류가 발생합니다. 왜냐하면 shared_ptr로 선언된 yptr과 Yeoul의 포인터는 형식이 맞지 않기 때문이지요 우리는 shared_ptr을 Yeoul*로 변환활 방법을 필요로 합니다. 2. 1번의 문제 해결법2-1. 명시적 형변환(explicit conversion)tr1::shared_ptr은 명시적으로 ..

[Effective C++] 항목 14: 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자

1. 개요이번 항목은 자원관리 클래스를 만들때 복사 동작에 대해서 어떻게 처리해야할지를 다루는 문서입니다. 예를 하나 들어보도록 하겠습니다.void lock(Mutex* pm); // pm이 가리키는 mutex에 잠금을 겁니다.void unlock(Mutex* pm); //pm이 가리키는 mutex에 잠금을 풉니다. 이러한 mutex잠금을 관리하는 클래스를 만들려고 합니다. 이러한 클래스 역시 RAII 법칙을 따르게 됩니다. 생성시 자원을 획득하고 소멸 시에 자원을 해제하는 개념입니다. 아래는 이러한 클래스의 예제입니다.class Lock {public: explicit Lock(Mutex *pm) : mutexPtr(pm) { lock(mutexPtr); /..