• 针对C++容器类的一个简陋的allocator


    参考:

    https://en.cppreference.com/w/cpp/named_req/Allocator

    http://www.josuttis.com/libbook/memory/myalloc.hpp.html

    template <class T>
       class MyAlloc {
         public:
           // type definitions
           typedef T        value_type;
           typedef T*       pointer;
           typedef const T* const_pointer;
           typedef T&       reference;
           typedef const T& const_reference;
           typedef std::size_t    size_type;
           typedef std::ptrdiff_t difference_type;
    
           // rebind allocator to type U
           template <class U>
           struct rebind {
               typedef MyAlloc<U> other;
           };
    
           // return address of values
           pointer address (reference value) const {
               return &value;
           }
           const_pointer address (const_reference value) const {
               return &value;
           }
    
           /* constructors and destructor
            * - nothing to do because the allocator has no state
            */
           MyAlloc() throw() {
           }
           MyAlloc(const MyAlloc&) throw() {
           }
           template <class U>
             MyAlloc (const MyAlloc<U>&) throw() {
           }
           ~MyAlloc() throw() {
           }
    
           // return maximum number of elements that can be allocated
           size_type max_size () const throw() {
               return std::numeric_limits<std::size_t>::max() / sizeof(T);
           }
    
           // allocate but don't initialize num elements of type T
           pointer allocate (size_type num, const void* = 0) {
               // print message and allocate memory with global new
               pointer ret = (pointer)(malloc(num*sizeof(T)));
               return ret;
           }
    
           // initialize elements of allocated storage p with value value
           void construct (pointer p, const T& value) {
               // initialize memory with placement new
               new((void*)p)T(value);
           }
    
           // destroy elements of initialized storage p
           void destroy (pointer p) {
               // destroy objects by calling their destructor
               p->~T();
           }
    
           // deallocate storage p of deleted elements
           void deallocate (pointer p, size_type num) {
               free((void*)p);
           }
       };
    
       // return that all specializations of this allocator are interchangeable
       template <class T1, class T2>
       bool operator== (const MyAlloc<T1>&,
                        const MyAlloc<T2>&) throw() {
           return true;
       }
       template <class T1, class T2>
       bool operator!= (const MyAlloc<T1>&,
                        const MyAlloc<T2>&) throw() {
           return false;
       }
  • 相关阅读:
    临时记事本
    D版??班得瑞英文天籁CD13集(下载!!!)
    一个程序员的早上
    使用C#实现Morse码的输出
    面向对象编程的乐趣(TextBox.Text="")
    如何从MS Word的表格中提取指定单元格的数据
    使用Turbo C创建自己的软件包(即创建接口)
    使用C#读取Word表格数据
    一种光栅绘制直线的方法
    关于数据库设计的一个思索这样做是不好的
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/11583360.html
Copyright © 2020-2023  润新知