boost::shared_ptr 의 동작 방식에 대해서...
글쓴이: freezm7 / 작성시간: 금, 2004/08/06 - 12:04오후
class Base { }; class Derived : public Base { }; Derived* derived = new Dervied(); shared_ptr<Base*> spBase(derived); shared_ptr<Derived*> spDerived(derived);
위와 같은 경우,
shared_ptr 내부에서 delete derived; 구문이 두번 호출 되어 문제가 될것 같습니다.
제가 원하는 것은, derived 포인터를, Base* 와 Derived* 두 종류의 shared_ptr 로 관리하는 것인데요.
안타깝게도 shared_ptr<Derived*> spDerived = spBase; 처럼 사용할 수가 없네요. (생각해보면 저런 동작을 기대하는 것이 모순이지만요)
:idea: 질문을 요약하면, 하나의 포인터를 서로 다른 템플릿 파라미터로 인스턴스화된 shared_ptr 를 사용해서 관리할 수 있는가 하는 것입니다. :?:
boost 라이브러리 잘만 활용하면 C++ 프로그래머들에게 엄청난 무기가 될 것 같군요. :wink:
Forums:
shared_ptr<Base>와 shared_ptr<De
shared_ptr<Base>와 shared_ptr<Derived>는 개념적으로는
상속관계가 있으나 문법적으로는 전혀 관계 없는 클래스입니다.
그러나 boost에서는 type parameter의 상속관계를 템플릿
멤버 함수를 통하여 구현하고 있습니다. 올리신 코드가 컴파일이
안된다고 하셨는데 이는 코드에 잘못이 있기 때문입니다.
다음처럼 고쳐보세요.
이 테크닉에 대해서 상세하게 알고 싶으시면 Scott Meyers의
More Effective C++ Item 28을 참고하세요.
감사합니다.
More Effective C++ 사놓고 못 보고 있었는데...
그곳에 해답이 있었군요.
퇴근 즉시 읽어봐야 겠네요. 감사합니다. :D
즐겁게 살아 볼까나~*
댓글 달기