Created
January 15, 2019 07:47
-
-
Save jhurliman/9f450c56f651187ba219102ff145faf3 to your computer and use it in GitHub Desktop.
Simple std::allocator example wrapping malloc/free
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
#include <memory> | |
#define NOMINMAX | |
#undef max | |
template <typename T> | |
class UntrackedAllocator { | |
public: | |
typedef T value_type; | |
typedef value_type* pointer; | |
typedef const value_type* const_pointer; | |
typedef value_type& reference; | |
typedef const value_type& const_reference; | |
typedef std::size_t size_type; | |
typedef std::ptrdiff_t difference_type; | |
public: | |
template<typename U> | |
struct rebind { | |
typedef UntrackedAllocator<U> other; | |
}; | |
public: | |
inline explicit UntrackedAllocator() {} | |
inline ~UntrackedAllocator() {} | |
inline UntrackedAllocator(UntrackedAllocator const&) {} | |
template<typename U> | |
inline UntrackedAllocator(UntrackedAllocator<U> const&) {} | |
// address | |
inline pointer address(reference r) { | |
return &r; | |
} | |
inline const_pointer address(const_reference r) { | |
return &r; | |
} | |
// memory allocation | |
inline pointer allocate(size_type cnt, | |
typename std::allocator<void>::const_pointer = 0) { | |
T *ptr = (T*)malloc(cnt * sizeof(T)); | |
return ptr; | |
} | |
inline void deallocate(pointer p, size_type cnt) { | |
free(p); | |
} | |
// size | |
inline size_type max_size() const { | |
return std::numeric_limits<size_type>::max() / sizeof(T); | |
} | |
// construction/destruction | |
inline void construct(pointer p, const T& t) { | |
new(p) T(t); | |
} | |
inline void destroy(pointer p) { | |
p->~T(); | |
} | |
inline bool operator==(UntrackedAllocator const& a) { return this == &a; } | |
inline bool operator!=(UntrackedAllocator const& a) { return !operator==(a); } | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment