Computer Language/C
shared_ptr를 사용해보자!!
rajent
2008. 12. 8. 04:53
728x90
shared_ptr를 접근할때 저는 OSG에서 처음 스마트 포인터라는 개념을 접해서 그쪽에 익숙한 상태였습니다.
OSG에서 스마트 포인터는 다음과 같이 사용했었습니다.
osg::ref_ptr<T> ptr = new T;
저는 이렇게 될 줄알고 shared_ptr를 사용했는데 웬걸?? 바로 에러가 발생하더군요;;
보통 사용할때는 std::tr1::shared_ptr<T> ptr(new T); 이렇게 사용하더라구요.
그런데 저는 list컨테이너의 아이템으로 사용해야 하기에 바로 변수를 정의하면서 생성하는 방법은 패스!!
그래서 shared_ptr class의 정의를 살펴보니 대입연산자는 같은 shared_ptr만 받로록 되어있더군요.
대신 reset()이라는 멤버함수가 있습니다. 이 녀석의 사용법은 두가지입니다.
첫번째는 참조를 해제할 경우
-> ptr.reset();
두번째는 기존의 참조를 해제하고 새로운 객체를 참조할 경우
-> ptr.reset(new T);
또는 대입연산자를 이용해서 이렇게도 가능합니다.
std::tr1::shared_ptr<T> ptr;
ptr = std:tr1::shared_ptr<T>(new T);
아래는 예제code!!
Visual c++ 2008 sp1에서 테스트했습니다~^^