본문 바로가기
Tools for Dev

boost::shared_ptr

by leanu 2008. 10. 8.


주의 : shared_ptr형은 "shared_ptr이 아닌 데이터형"의 주소를 복사할 수 없다. 왜냐하면, shared_ptr은 참조 횟수가 0일때 자동으로 메모리를 해제하게 되는데, 만약 해제할 메모리가 자기가 관리하는 영역밖의 것이라면 안정성을 보장할 수 없기 때문이다. 아래와 같은 것이 안된다는 것이다.
     (잘못된 예)
        int a = 3;
        boost::shared_ptr<int> test;
        test = &a    // Compile error 대입 자체가 안된다. 대입은 shared_ptr끼리만 된다.
        (*test)++;

주석에 쓴 것처럼 shared_ptr끼리의 주소 대입은 된다. shared_ptr중 적어도 한개는 내부에 메모리를 할당한 object를 가지고 있어야 하기 때문에, 결국 shared_ptr끼리 물고있는 영역은 shared_ptr이 관리할 수 있는 영역이 되고 이로인해 메모리 해제시 안전성을 보장할 수 있다.

       (올바른 예)
          boost::shared_ptr<int> test(new int(3));
          boost::shared_ptr<int> test2;
          test2 = test;
          (*test2)++;
          std::cout << *test<< std::endl;

'Tools for Dev' 카테고리의 다른 글

Simple GIT Usage  (0) 2008.11.24
GIT - Fast Version Control System  (9) 2008.11.13
boost::asio 를 이용한 asyncronous communication 클래스  (0) 2008.10.07
boost asio - 수정중  (0) 2008.10.01
boost::enable_shared_from_this  (0) 2008.10.01

댓글