C++摒弃了C中的realloc()函数

在C语言中,realloc()函数可以改变已分配内存区的大小。但是在C++中并不提供类似功能的函数。

如果你需要,你当然可以使用realloc()。但是,realloc()仅仅保证能工作于这样的数组之上:它们被malloc()(或者类似的函数)分配,包含一些没有用户定义的复制构造函数(copy constructors)的对象。而且,要记住,与通常的期望相反,realloc()有时也必须复制它的参数数组。

C++中,处理内存重新分配的更好的方法是,使用标准库中的容器,例如vector,并让它自我增长。

C++里没有realloc不是遗憾,而是精心选择和淘汰的结果。 在C里,realloc的实现(在增加空间的时候)一般而言是重新分配一块空间,   (这是由堆分配的策略决定的),  然后把旧空间的内容copy到新空间里去。而对象空间怎么copy?   是copy字节还是用copy   constructor?  无论哪个都不合适。

那种想在原地(即首地址不动)就把申请内存空间扩大的思想不是一个好思想。

所以不要过多纠结于如何在内置数组或指针基础上找类似于realloc()函数改变已分配内存区大小的函数了。

如果实在想做类似于realloc()函数的操作,可参考如下代码:

#include
using namespace std;

int main()
{
    int *oldbuf=new int[5];
    int *newbuf=new int[10];
    for(int i=0;i<5;i++)
    {
        oldbuf[i]=i;
    }
    copy(oldbuf,oldbuf+5,newbuf);
    delete[] oldbuf;
    for(i=5;i<10;i++)
    {
        newbuf[i]=i;
    }
    for(i=0;i<10;i++)
    {
        cout<     }
    return 0;
}

你可能感兴趣的:(C/C++)