博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义的allocator
阅读量:6680 次
发布时间:2019-06-25

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

《STL源码剖析》学习笔记

jjalloc.h

#ifndef  JJALLOC_H#define JJALLOC_H#include
#include
#include
#include
#include
namespace JJ{template
inline T* _allocate(ptrdiff_t size,T*){ /*set_new_handler则是一个输入并返回 new_handler类型的函数。set_new_handler的 输入参数是operator new分配内存失败时要调 用的出错处理函数的指针,返回值 是set_new_handler没调用之前就 已经在起作用的旧的出错处理函数的指针*/ set_new_handler(0); T* tem=(T*)(::operator new((size_t)(size *sizeof(T)))); if(tem==0){ cout<<"out of memory"<
inline void _deallocate(T* buffer){ ::operator delete(buffer);} template
inline void _construct(T1* p,const T2& value){ new(p) T1(value);}template
inline void _destroy(T* ptr){ ptr->~T();}template
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; //rebind alloctor of type u template
struct rebind{ typedef allocator
other; }; pointer allocate(size_type n,const void* hint=0){ return _allocate((difference_type)n,(pointer)0); } void deallocate(pointer p,size_type n){ _deallocate(p); } void construct(pointer p,const T& value){ _construct(p,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 //JJALLOC_H

测试代码:

#include "jjalloc.h"#include
using namespace std;class Test{ public: int x; Test(int b=0){ x=b; } ~Test(){ }};int main(){ int x=4; JJ::allocator
a; JJ::allocator
b; int *p=a.allocate(1); Test *t=new Test; //new(p) T1(value) 这叫place new,在指针p所指向的内存空间创建一个 //类型为T1的对象。调用的构造函数接受一个类型为const // T2&(或其他兼容类型)的参数// new(&t) Test(x); b.construct(t,x); *p=1; cout<<*p<
x<

 

转载于:https://www.cnblogs.com/sklww/p/3521620.html

你可能感兴趣的文章
享元模式(Flyweight Pattern)
查看>>
(转载)Hive学习笔记--Hive 参数
查看>>
java多线程学习总结之一:基础原理
查看>>
Ajax入门
查看>>
iOS开发之FMDB入门学习心得(Swift版)
查看>>
MYSQL使用命令行 导入导出数据库
查看>>
代码评审工具Rietveld平台搭建(windows&Linux均可)
查看>>
【OC】十一、数组对象(NSArray & NSMutableArray)
查看>>
Hibernate在线考试系统 01
查看>>
2016 年 31 款轻量高效的开源 JavaScript 插件和库
查看>>
javascript动画封装
查看>>
Ambari更改HDFS的Datanode和Namenode路径发生的错误
查看>>
Spring Boot 2.x 启动全过程源码分析(上)入口类剖析
查看>>
Spring Boot 自定义日志详解
查看>>
Maven聚合模块与继承和Maven的生命周期
查看>>
centos6.4 32/64位机 hadoop2.2.0集群安装
查看>>
Ubuntu14.04系统输入法安装之我见
查看>>
Bottle文档最新翻译版-1.1一个简单的小教程
查看>>
ALAssetsLibrary取出保存图片到相册
查看>>
mysql 自动备份,以及恢复
查看>>