본문 바로가기

프로그래밍

boost::intrusive_ptr

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