allocator.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 85 行

HPP
85
字号
// Copyright 2006-2008 Daniel James.// Distributed under the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)#if !defined(BOOST_UNORDERED_TEST_MALLOC_ALLOCATOR_HEADER)#define BOOST_UNORDERED_TEST_MALLOC_ALLOCATOR_HEADER#include <cstddef>#include <cstdlib>#include <boost/limits.hpp>#include <new>#if defined(BOOST_MSVC)#pragma warning(push)#pragma warning(disable:4100) // unreferenced formal parameter#endifnamespace test{    template <class T>    struct malloc_allocator    {        typedef std::size_t size_type;        typedef std::ptrdiff_t difference_type;        typedef T* pointer;        typedef T const* const_pointer;        typedef T& reference;        typedef T const& const_reference;        typedef T value_type;        template <class U> struct rebind { typedef malloc_allocator<U> other; };        malloc_allocator() {}        template <class Y> malloc_allocator(malloc_allocator<Y> const&) {}        malloc_allocator(malloc_allocator const&) {}        pointer address(reference r) { return &r; }        const_pointer address(const_reference r) { return &r; }        pointer allocate(size_type n) {            using namespace std;            T* ptr = static_cast<T*>(malloc(n * sizeof(T)));            if(!ptr) throw std::bad_alloc();            return ptr;        }        pointer allocate(size_type n, void const* u) { return allocate(n); }        void deallocate(pointer p, size_type) {            using namespace std;            free(p);        }        void construct(pointer p, T const& t) { new(p) T(t); }        void destroy(pointer p) { p->~T(); }        size_type max_size() const {            return (std::numeric_limits<size_type>::max)();        }        bool operator==(malloc_allocator const& x) const { return true; }        bool operator!=(malloc_allocator const& x) const { return false; }#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)        template <class T> void deallocate(T* p, size_type) {            using namespace std;            free(p);        }        char* _Charalloc(size_type n) {            using namespace std;            T* ptr = static_cast<T*>(malloc(n * sizeof(char)));            if(!ptr) throw std::bad_alloc();            return (char*) ptr;        }#endif    };}#if defined(BOOST_MSVC)#pragma warning(pop)#pragma warning(disable:4100) // unreferenced formal parameter#endif#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?