sys_allocator.hpp

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

HPP
100
字号
// Copyright (C) 2000 Stephen Cleary//// 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)#ifndef BOOST_SYS_ALLOCATOR_H#define BOOST_SYS_ALLOCATOR_H// Symbols: malloc_allocator, new_delete_allocator#include <cstddef>#include <cstdlib>#include <boost/limits.hpp>#include <new>template <typename T>struct malloc_allocator{  typedef T * pointer;  typedef const T * const_pointer;  typedef T & reference;  typedef const T & const_reference;  typedef T value_type;  typedef std::size_t size_type;  typedef std::ptrdiff_t difference_type;  template <typename U>  struct rebind  {    typedef malloc_allocator<U> other;  };  static pointer address(reference r) { return &r; }  static const_pointer address(const_reference r) { return &r; }  static pointer allocate(const size_type n, const pointer = 0)  {    const pointer ret = (pointer) std::malloc(n * sizeof(T));    if (ret == 0)      throw std::bad_alloc();    return ret;  }  static void deallocate(const pointer p, const size_type)  { std::free(p); }  static size_type max_size() { return (std::numeric_limits<size_type>::max)(); }  bool operator==(const malloc_allocator &) const { return true; }  bool operator!=(const malloc_allocator &) const { return false; }  malloc_allocator() { }  template <typename U>  malloc_allocator(const malloc_allocator<U> &) { }  static void construct(const pointer p, const_reference t)  { new ((void *) p) T(t); }  static void destroy(const pointer p)  { p->~T(); }};template <typename T>struct new_delete_allocator{  typedef T * pointer;  typedef const T * const_pointer;  typedef T & reference;  typedef const T & const_reference;  typedef T value_type;  typedef std::size_t size_type;  typedef std::ptrdiff_t difference_type;  template <typename U>  struct rebind  {    typedef new_delete_allocator<U> other;  };  static pointer address(reference r) { return &r; }  static const_pointer address(const_reference r) { return &r; }  static pointer allocate(const size_type n, const pointer = 0)  { return (pointer) new char[n * sizeof(T)]; }  static void deallocate(const pointer p, const size_type)  { delete [] p; }  static size_type max_size() { return (std::numeric_limits<size_type>::max)(); }  bool operator==(const new_delete_allocator &) const { return true; }  bool operator!=(const new_delete_allocator &) const { return false; }  new_delete_allocator() { }  template <typename U>  new_delete_allocator(const new_delete_allocator<U> &) { }  static void construct(const pointer p, const_reference t)  { new ((void *) p) T(t); }  static void destroy(const pointer p)  { p->~T(); }};#endif

⌨️ 快捷键说明

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