본문 바로가기

스마트포인터2

[Effective C++]항목 15 : 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. 요약 실제 자원을 직접 접근해야 하는 기존 API들도 많기 때문에, RAII 클래스를 만들때는 그 클래스가 관리하는 자원을 얻을 수 있는 방법을 열어 주어야 한다. 자원 접근은 명시적 변환 혹은 암시적 변환을 통해 가능하다. 안전성만 따지면 명시적 변환이 대체적으로 더 낫지만, 편의성을 놓고 보면 암시적 변환이 괜찮다. class Investment {//여러 형태의 투자를 모델링한 투자 클래스들의 최상위 클래스 public: bool isTaxfree() const; ... }; Investment* createInvestment();//팩토리 함수 std::tr1::shared_ptr pi1(createInvestment());//tr1::shared_ptr이 자원관리를 맡도록 합니다.. bool t.. 2019. 8. 5.
[Effective C++] 항목 13 : 자원 관리에는 객체가 그만! auto_ptr과 tr1::shared_ptr에 대해서 서술되어 있는데 현재 auto_ptr은 사라진 상태이므로 그냥 그 이후에 적용된 스마트포인터 중 유니크 포인터에 대해서 서술하겠다. auto_ptr이 왜 사라진 이유는 배열의 포인터를 해제할 때 배열 객체가 모두 제대로 해제되지 않는다는 것과 복사 대입 연산시 실제로는 복사가 되지 않는다는 것이다. 이러한 문제점들을 보완하기 위해 C++11 표준에서는 새로운 스마트 포인터들이 포함됐다. 그리고 이동 시맨틱이 추가되었다. 이동 시맨틱은 객체를 복사하지 않고 이동시킨다. 이동 후에 객체의 소유권은 당연히 대입된 쪽이 가진다. 복사 시맨틱일 경우, STL 컨테이너 중 리스트나 벡터는 동적 배열이기 때문에 상황에 따라 그 메모리 크기가 두배까지 늘어난다. .. 2019. 7. 31.