c++ 追加空间

来源:百度知道 编辑:UC知道 时间:2024/07/06 18:51:12
C++里用new运算符分配的内存如何能实现追加存储空间谢谢,换句话说就是用new运算符已分配的空间满了,在此基础上保留原空间内容再追加分配一些空间,即C语言中的realloc()的功能
请写出实现追加存储空间的语句,谢谢...

new分配的空间没有这个功能,需要再new空间,然后memcpy考过去

realloc也是这样实现功能的,不过帮你实现了就是了

重载 new ,使之模仿 realloc() 的行为 , 如下:
void * operator new ( size_t sz , void * old ) {
return realloc(old ,sz) ;
}
很可惜这样不行 ,因为系统已经有这样一个重载版本 ,这样做会引起重定义。
可以在文件的最开始 #define _NEW_ 屏蔽掉系统的 new ,不过这样做太极端了 ,因为所有版本的 new 都得自己写 ,而且要时刻注意 delete ,因为C语言的内存申请不可用 delete 删除 ,或者把所有版本的 delete 也重载了。
也可以如下实现:
void * operator new ( size_t sz , void * old , int NOuse ) {
return realloc(old ,sz) ;
}

把上面代码放在使用它的地方的前面 ,调用时如下
var = new( old , int ) TYPE[new_size] ;//new_size的为个数
举例如下:
char * str = malloc(5) ; //由于上面的new里使用了 realloc() ,故不可调用系统的new来申请这些空间 , 即 char * str = new char[5]。
sprintf(str,"abcd") ;
str = new(str,5) char[100] ;//5可以是任意一个整数

这样做看起来更麻烦一些,还不如用malloc() 和 realloc() 直接做。

根据内存分配原理来说
要保留原来的地址很难

要保留内容,参考上面