自己动手写空间配置器

有没有想过自己写空间配置器?

看了《STL源码剖析》才是初步

这是主程序

#include "stdafx.h" #include <iostream> #include <vector> #include "myAlloc.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int ia[5] = {0,1,2,3,4}; unsigned int i; vector<int,lisency::allocator<int> > iv(ia,ia + 5); for (i = 0;i < iv.size();i++) { cout << iv[i] << " "; } cout << endl; return 0; }

下面是头文件

 

#ifndef _MYALLOC_H #define _MYALLOC_H #include <new> #include <cstddef> #include <cstdlib> #include <climits> #include <iostream> namespace lisency { template <typename T>inline T* _allocate(ptrdiff_t size,T*) { set_new_handler(0); T* tmp = (T*)(::operator new((size_t)(size * sizeof(T)))); if (!tmp) { cerr << "out of memory" << endl; exit(1); } return tmp; } template <typename T>inline void _deallocate(T* buffer) { ::operator delete(buffer); } template <typename T1,typename T2>inline void _construct(T1 p,const T2&value) { new(p) T1(value); } template <typename T>inline void _destroy(T* ptr) { ptr->~T(); } template <typename 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; template <typename U> struct rebind { typedef allocator<U> other; }; pointer allocate(size_type n,const void* hint = 0) { return _allocate((difference_type)n,(pointer)0); } void deallocate(pointer p,const T& value) { _deallocate(p); } void construct(pointer p,const T& value) { _construct(pointer,value); } void destroy(pointer p) { _destroy(p); } pointer address(reference x) { return (pointer)&x; } const_pointer const_address(const_reference x) { return (const_pointer)&x; } size_type max_size()const { return size_type(UINT_MAX / sizeof(T)); } }; } #endif //_MYALLOC_H

你可能感兴趣的:(自己动手写空间配置器)