C++动态内存分配---allocator类的原理与实现(一)

引言

说到C++动态内存分配,我们首先都会想到new和delete运算符,new运算符可以分配并初始化一个对象或对象数组,并返回指向数组第一个对象的指针。而delete运算符则逐个销毁(根据对象数组倒序执行析构函数)对象并回收内存,需要注意的是delete回收对象数组时应加上[]。new和delete是常用的动态内存分配手段,new将分配内存和构造对象结合,delete则将析构和回收内存结合,非常方便的同时也带来了一定的局限性。如果我们只是想分配一块内存,但是并不想马上构造对象时,new运算符的方便就显得有些多余了,这时我们需要把内存的分配与构造两个动作分离,更有效率的进行内存管理,这就需要用到allocator了。

简单的allocator实现

这里我找来了VC++2013中vector容器的原型,我们可以看到实际上vector不单单只有一个模板参数,还有一个默认的参数就是allocator类,我们完全可以DIY一个allocator来分配内存,只要这个allcator满足STL标准的接口要求。

vector<typename _Ty,typename _Alloc = allocator<_Ty>>

让我们来试试自己实现一个简单的allocator类(参考STL源码剖析)

#ifndef __JJALLOC__
#define __JJALLOC__
#include<new> // for placement new
#include<iostream> //for cerr
#include<cstddef>  //for ptrdiff_t
#include<cstdlib> // for exit()
#include<climits> // for UINT_MAX
namespace JJ{
    template<class T>
    inline T* _allocate(ptrdiff_t size, T*){
        //set_new_handler(0);
        T* tmp = (T*)(::
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值