shared_ptr

좋은 인터페이스는 제대로 쓰기엔 쉽고 틀리게 쓰기엔 어렵다. 인터페이스를 만들 때는 이 특성을 지닐 수 있도록 고민해야 한다. 사용자의 실수를 방지하는 방법으로는 새로운 타입 만들기, 타입에 대한 연산 제한, 객체의 값에 대해 제약 걸기, 자원 관리 작업을 사용자 책임으로 놓지 않기가 있다. 인터페이스의 올바른 사용을 이끄는 방법으로는 인터페이스 사이의 일관성 잡아주기, 기본 제공 타입과의 동작 호환성 유지하기가 있다. tr1::shared_ptr은 사용자 정의 삭제자를 지원한다. 이 특징 때문에 tr1::shared_ptr은 교차 DLL 문제를 막아 주며, 뮤텍스 등을 자동으로 잠금 해제하는 데 사용할 수 있다. 인터페이스는 제대로 쓰기엔 쉽게, 틀리게 쓰기엔 어렵게 C++에서 인터페이스의 활용도는 매..
실제 자원을 직접 접근해야 하는 기존 API들도 많기 때문에, RAII 클래스를 만들 때는 그 클래스가 관리하는 자원을 얻을 수 있는 방법을 제공해야 한다. 자원 접근은 명시적 변환 혹은 암시적 변환을 통해 가능하다. 안전성만 따지면 명시적 변환이 대체로 낫지만, 편의성을 보면 암시적 변환이 더 낫다. 자원 관리 클래스에서의 자원 접근 허용 자원 관리 클래스는 자원 누출을 막을 수 있는 보호막 역할을 한다. 하지만, 자원에 대한 직접적인 접근이 필요한 상황이 있다. 예를 들어, 스마트 포인터를 이용하여 자원 관리를 하는 경우 원래의 자원을 매개변수로 사용해야 하는 함수가 있을 때 스마트 포인터를 넘긴다면 에러가 발생한다. std::tr1::shared_ptr pInv(createInvestment());..
자원 누출을 막기 위해, 생성자 안에서 자원을 획득하고 소멸자에서 그것을 해제하는 RAII 객체를 사용하자. 일반적으로 쓰이는 RAII 클래스는 tr1::shared_ptr, auto_ptr이다. tr1::shared_ptr이 복사 시의 동작이 직관적이기 때문에 더 좋다. auto_ptr은 원본 객체를 null로 만든다. 자원 관리 객체 자원이란, 사용을 일단 마치고 난 후엔 시스템에 돌려주어야 하는 모든 것을 일컫는다. 특히 동적 할당된 메모리가 있고 파일 서술자, 뮤텍스 잠금, GUI, 폰트, 브러시 등이 있다. 이러한 자원들을 관리하는데 효과적인 방법 중 하나는 자원 관리 객체를 사용하는 것이다. 투자를 모델링해 주는 클래스 라이브러리를 가지고 작업을 한다고 가정하자. 이 라이브러리는 Investm..
hvv_an
'shared_ptr' 태그의 글 목록