intrusive_ptr 은 shared_ptr 과 마찬가지로 참조 카운팅 방식의 스마트 포인터다.
그러나 intrusive_ptr은 reference count 를 스마트 포인터에서 관리되는 객체에서 직접 관리한다.
intrusive_ptr 객체는 intrusive_ptr_add_ref 함수를 이용해 reference count 를 증가시키고
반대로 intrusive_ptr_release 함수로 감소시킨다.
intrusive_ptr_release 함수 에서는 reference count가 0이 될때 관리되는 객체를 파괴시켜야 한다.
예)
class MyClass; void intrusive_ptr_add_ref(MyClass* p); void intrusive_ptr_release(MyClass* p); class MyClass { public: MyClass():m_refCount(0){} ~MyClass(){} friend void intrusive_ptr_add_ref(MyClass* p) { p->m_refCount++; } friend void intrusive_ptr_release(MyClass* p) { if(--(p->m_refCount) <= 0) { delete p; } } private: long m_refCount; };
intrusive_ptr 을 사용하는 주된 이유:
- Some existing frameworks or OSes provide objects with embedded reference counts;
- The memory footprint of intrusive_ptr is the same as the corresponding raw pointer;
- intrusive_ptr<T> can be constructed from an arbitrary raw pointer of type T *.
shared_ptr보다 intrusive_ptr이 사용 요구에 맞는 것인지 명확하지 않다면 일반적으로, 먼저 shared_ptr 기반의 디자인을 시도한다.
'프로그래밍' 카테고리의 다른 글
Proactor pattern (0) | 2012.08.11 |
---|---|
[펌] 코드 정리 하기 (0) | 2012.08.11 |
Visual Studio 2010 부스트 빌드 (0) | 2012.07.24 |
.cpp 및 헤더 파일에서의 include 다이렉티브 (0) | 2012.03.26 |
ACE 정보 및 기술 지원 (0) | 2011.07.08 |