강좌

C++ boost 메모리풀 강좌 #4: object_pool 클래스를 이용하여 new 재정의 없이 일반 클래스에 메모리풀 적용하기

하늘흐늘 2021. 11. 14. 13:33
반응형

object_pool은 pool의 클래스 할당 및 해제 버전으로 보면 이해하기 쉽습니다. pool과 사용법이 유사한데 틀린점은 construct와 destory 함수를 이용하여 할당 및 해제를 한다는 점입니다. 또한 construct 함수를 호출할 때 생성 인자를 넣어서 생성할 수도 있습니다. 단, 아쉽게도 생성인자는 3개까지 지원합니다. 

new 재정의로 메모리 풀을 적용하지 않은 클래스에 대하여 생성시점에서 메모리풀을 사용하기에 좋습니다.

간단한 예를 살펴보도록 하겠습니다.

#include <iostream>
#include <boost/pool/object_pool.hpp>

using namespace std;


class test_mpa2 
{
private:
	char test_[256];

public:
	test_mpa2(const char* str)
	{
		strcpy_s(test_, 256, str);
	}

	void test()
	{
		cout << test_ << endl;
	}
};

int main(int argc, char* argv[])
{
	boost::object_pool<test_mpa2> pool;

	test_mpa2* test = pool.construct("hello, object_pool");

	test->test();

	pool.destroy(test);

	return 0;
}

예제에서 처럼 메모리풀 생성 인자에 사용할 클래스를 넣어주고 생성하면 됩니다. 그 뒤로 사용은 construct를 클래스 생성자처럼 사용하여 메모리를 할당받으며 되며 destroy로 메모리를 해제시켜 주면 됩니다.

 

반응형