STL_allocator.h 发表于 2020-05-17 | 字数统计: | 阅读时长 ≈ ✍✍✍ 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113#pragma once#ifndef _ALLOCATOR_H_#define _ALLOCATOR_H_// 这个头文件包含一个模板类 allocator,用于管理内存的分配、释放,对象的构造、析构#include "construct.h"#include "util.h"namespace mystl{ // 模板类:allocator // 模板函数代表数据类型 template <class T> class allocator { public: typedef T value_type; typedef T* pointer; typedef const T* const_pointer; typedef T& reference; typedef const T& const_reference; typedef size_t size_type; typedef ptrdiff_t difference_type; public: static T* allocate(); static T* allocate(size_type n); static void deallocate(T* ptr); static void deallocate(T* ptr, size_type n); static void construct(T* ptr); static void construct(T* ptr, const T& value); static void construct(T* ptr, T&& value); template <class... Args> static void construct(T* ptr, Args&& ...args); static void destroy(T* ptr); static void destroy(T* first, T* last); }; //override template <class T> T* allocator<T>::allocate() { return static_cast<T*>(::operator new(sizeof(T))); } //override template <class T> T* allocator<T>::allocate(size_type n) { if (n == 0) return nullptr; return static_cast<T*>(::operator new(n * sizeof(T))); } //override template <class T> void allocator<T>::deallocate(T* ptr) { if (ptr == nullptr) return; ::operator delete(ptr); } //override template <class T> void allocator<T>::deallocate(T* ptr, size_type /*size*/) { if (ptr == nullptr) return; ::operator delete(ptr); } //override template <class T> void allocator<T>::construct(T* ptr) { mystl::construct(ptr); } //override template <class T> void allocator<T>::construct(T* ptr, const T& value) { mystl::construct(ptr, value); } //override template <class T> void allocator<T>::construct(T* ptr, T&& value) { mystl::construct(ptr, mystl::move(value)); } //override template <class T> template <class ...Args> void allocator<T>::construct(T* ptr, Args&& ...args) { mystl::construct(ptr, mystl::forward<Args>(args)...); } //override template <class T> void allocator<T>::destroy(T* ptr) { mystl::destroy(ptr); } //override template <class T> void allocator<T>::destroy(T* first, T* last) { mystl::destroy(first, last); }}#endif 本文标题:STL_allocator.h 文章作者:zhz 发布时间:2020年05月17日 - 17:05 最后更新:2020年05月17日 - 17:05 原始链接:http://yoursite.com/2020/05/17/STL-allocator-h/ 许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。 本文作者: zhz 本文链接: http://yoursite.com/2020/05/17/STL-allocator-h/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!