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>>>;
// ...
// 이런 선언을 해줘도 좋다