C++中的动态空间扩充方法

由于C++中没有C语言中的realloc的函数,对存储空间的动态增长的再分配,就此写一个模板进行替代之:­

view plaincopy to clipboardprint?
template<typename T>   
T* realloc( T* &p, size_t oldsize, size_t newsize )  
{   
    if ( oldsize > newsize )  
    {  
        return NULL;  
    }  
    T* tmpmemery=new T[newsize];   
    memset( tmpmemery, 0, newsize );  
    memcpy( tmpmemery, p, oldsize*sizeof(T) );   
    delete []p;   
    return p = tmpmemery;   
}   
int main()  
{   
    int* p = new int[128];   
    for( int i=0; i < 128; i++ )   
        p[i] = i;   
    realloc( p, 128, 256 );  
    delete []p;  
    return 0;  
}  
template<typename T>
T* realloc( T* &p, size_t oldsize, size_t newsize )
{
    if ( oldsize > newsize )
    {
        return NULL;
    }
    T* tmpmemery=new T[newsize];
    memset( tmpmemery, 0, newsize );
    memcpy( tmpmemery, p, oldsize*sizeof(T) );
    delete []p;
    return p = tmpmemery;
}
int main()
{
    int* p = new int[128];
    for( int i=0; i < 128; i++ )
        p[i] = i;
    realloc( p, 128, 256 );
    delete []p;
    return 0;
}

 

代码本身没有什么,关键是思路:

首先、判断要申请的空间是否比原来的大;

然后、用new申请一个更大的内存空间,并将其置空;

接着、将原来指向的内存空间的内容进行拷贝到新申请的空间;

最后、将原来的空间进行释放,原来的指针指向新申请的空间,返回即可。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值