(C++ : IOCP-20) STL Allocator

Posted by : at

Category : Cpp   iocp



STL내부는 new, delete를 여전히 내부적으로 쓸텐데 ???

이 부분을 해결해보자.

template<typename T>
class StlAllocator
{
public:
	using value_type = T;

	StlAllocator() { }

	template<typename Other>
	StlAllocator(const StlAllocator<Other>&) { }

	T* allocate(size_t count)
	{
		const int32 size = static_cast<int32>(count * sizeof(T));
		return static_cast<T*>(xalloc(size));
	}

	void deallocate(T* ptr, size_t count)
	{
		xrelease(ptr);
	}
};

/*
// (참고) xalloc은 미리 StompAllocator로 만들어 둠.
#ifdef _DEBUG
#define xalloc(size)		StompAllocator::Alloc(size)
#define xrelease(ptr)		StompAllocator::Release(ptr)
#else
#define xalloc(size)		BaseAllocator::Alloc(size)
#define xrelease(ptr)		BaseAllocator::Release(ptr)
#endif
*/
// 이렇게 쓰면된다.
vector<int32, StlAllocator<int32>> v;

// 좀 더 쉽게쓰기위해서
template<typename Type>
using Vector = vector<Type, StlAllocator<Type>>;

template<typename Type>
using List = list<Type, StlAllocator<Type>>;

template<typename Key, typename Type, typename Pred = less<Key>>
using Map = map<Key, Type, Pred, StlAllocator<pair<const Key, Type>>>;
// ...

// 이런 선언을 해줘도 좋다

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links