博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【STL源码剖析读书笔记】自己实现简单的空间配置器MyAllocator
阅读量:4965 次
发布时间:2019-06-12

本文共 1969 字,大约阅读时间需要 6 分钟。

MyAllocator.h

#ifndef MY_ALLOCATOR_H#define MY_ALLOCATOR_H#include
//placement new#include
//ptrdiff_t size_t//分配内存template
inline T* _allocator(ptrdiff_t n,T*){ T* temp = (T*)(::operator new((size_t)(n*sizeof(T)))); if (temp == 0){ cout << "out of memory" << endl; exit(1); } return temp;}//释放内存template
inline void _deallocator(T* ptr){ ::operator delete(ptr);}//构造对象template
inline void _construct(T* ptr, const V& value){ new (ptr) T(value); //定位new,在指定地址处构造对象}//析构对象template
inline void _destroy(T* ptr){ ptr->~T();}template
class MyAllocator{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
struct rebind{ typedef MyAllocator
other; }; pointer allocator(size_type n){ return _allocator((difference_type)n,(pointer)0); } void deallocator(pointer ptr){ _deallocator(ptr); } void construct(pointer ptr, value_type value){ _construct(ptr, value); } void destroy(pointer ptr){ _destroy(ptr); } pointer address(reference x){ return (pointer)&x; } const_pointer address(reference x) const{ return (const_pointer)&x; } size_type max_type() const{ return size_type(UINT_MAX / sizeof(T)); }};#endif

main.cpp

#include "MyAllocator.h"#include
using namespace std;int main(){ MyAllocator
alloc; int* ptr=alloc.allocator(2); alloc.construct(ptr, 10); alloc.construct(ptr+1, 8); cout << *ptr << endl; cout << ptr[1] << endl; alloc.destroy(ptr); alloc.destroy(ptr + 1); alloc.deallocator(ptr); MyAllocator
::rebind
::other dalloc; double* p = dalloc.allocator(2); dalloc.construct(p, 3.5); cout << *p << endl; dalloc.destroy(p); dalloc.deallocator(p); system("pause"); return 0;}

转载于:https://www.cnblogs.com/ruan875417/p/4558293.html

你可能感兴趣的文章
(4) Orchard 开发之 Page 的信息存在哪?
查看>>
ASP.NET中 GridView(网格视图)的使用前台绑定
查看>>
深入了解Oracle ASM(二):ASM File number 1 文件目录
查看>>
Boosting(提升方法)之AdaBoost
查看>>
Binding object to winForm controller through VS2010 Designer(通过VS2010设计器将对象绑定到winForm控件上)...
查看>>
Spring Boot实战笔记(二)-- Spring常用配置(Scope、Spring EL和资源调用)
查看>>
SwaggerUI+SpringMVC——构建RestFul API的可视化界面
查看>>
springmvc怎么在启动时自己执行一个线程
查看>>
C# 通知机制 IObserver<T> 和 IObservable<T>
查看>>
Code of Conduct by jsFoundation
查看>>
C#小练习ⅲ
查看>>
电源防反接保护电路
查看>>
arraylist
查看>>
zoj 1649 Rescue (BFS)(转载)
查看>>
2124: 等差子序列 - BZOJ
查看>>
字符串匹配算法综述
查看>>
Linux centosVMware shell 管道符和作业控制、shell变量、环境变量配置文件
查看>>
【设计模式】工厂模式
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
客户数据库出现大量cache buffer chains latch
查看>>